我希望能够使用看起来像这样的东西来初始化我的一个类
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中完成它,但这并没有提供帮助我解决问题的线索。
答案 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”发布的。
我工作之后,我简单地删除了我的代码并从头开始再次编写。