警告:创建Objective-C(ios)初始化程序时出现'冲突类型...'

时间:2011-05-14 04:13:46

标签: iphone objective-c ios constructor initialization

我希望能够使用看起来像这样的东西来初始化我的一个类

ModelClass *aModelClass = [[ModelClass alloc] initWithXML:imageXML];

这就是我在界面文件中所写的内容:

-(id)initWithXML:(TBXMLElement *)imageXML

并在实施文件中这样:

-(id)initWithXML:(TBXMLElement *)imageXML
{
    self = [super init];

    if(imageXML) 
    {
        // do stuff with self.foo
        return self;
    }
    return nil;
}

所以我在接口文件和实现文件中声明了它。但我得到的错误是他们是冲突的。那么如果不在两者中声明完全相同的方法签名,我该怎么做呢?

我现在得到的错误是:

  

冲突类型   “ - (ID)initWithXML:(TBXMLElement   *)imageXML'

我主要关注this article以了解如何做到这一点,并了解如何在Objective-C中完成它,但这并没有提供帮助我解决问题的线索。

3 个答案:

答案 0 :(得分:1)

您将返回nil必须应该总是返回一个对象。(感谢Josh指出你并不总是需要返回一个对象)像这样:

-(id)initWithXML:(TBXMLElement *)imageXML {
    if (self = [super init]) {
        if(imageXML) {
            // do stuff with self.foo
        }
    }
    return self;
}

另外,我只记得遇到类似于我自己的东西。确保在两个类TBXML.h以及您创建ModelClass的控制器中导入ModelClass。问题是编译器不知道TBXMLElement是什么,所以你需要通过导入相关的头来指示它。

答案 1 :(得分:1)

这可能不是,但你的界面定义中似乎缺少分号:

-(id)initWithXML:(TBXMLElement *)imageXML

应该是

-(id)initWithXML:(TBXMLElement *)imageXML;

但也许这只是在您撰写问题时的复制和粘贴错误。

还要确保你

#import "TBXML.h" 
在ModelClass.h中

(如果你将它包含在ModelClass.h中,那么导入ModelClass.h的其他.m文件也将获得他们需要的TBXMLElement的定义。

答案 2 :(得分:-1)

感谢您的帮助! 我在黑暗中徘徊了一段时间并没有找到问题的原因,尽管这两个解决方案都是由“sudo rm -rf”和“idz”发布的。

我工作之后,我简单地删除了我的代码并从头开始再次编写。