我已经扩展了一个类,用于处理解析特定XML文件的类别。
在类ListBuilder.m
中,我定义了名为newsloop
的方法,它只是在构建列表后循环遍历项目列表。
-(void)newsloop;
在ListBuilder.m
内声明的私有类别中声明。
在我的类别中,ListBuilder+XMLParser.m
是我在建立列表后调用newsloop的地方:
-(void) parserDidEndDocument: (NSXMLParser *)parser {
if ( [self.newslist count] >= 2 )
[self newsloop]; // warning flagged here
else
// to some other default stuff
}
Xcode(4,如果重要)显示警告Method '-newsloop' not found (return type defaults to 'id')
。
为什么会引起警告,因为如果我是对的,类别可以访问他们正在扩展的类中定义的所有方法。
答案 0 :(得分:2)
编译器仍然需要知道newsloop
方法(或选择器)存在。在编译类别文件时,此方法尚未在任何地方声明,因此会生成警告。
如果要保持此方法的私有性,则应创建一个ListBuilder + Private.h文件,在其中声明任何共享私有方法,并将其包含在ListBuilder.m和ListBuilder + XMLParser类别中。
从技术上讲,代码的用户可以自己包含标题并调用方法,但是还有其他方法可以做到这一点,因为Objective-C中没有私有/公共方法。此外,包括一个标题为'Private'并调用方法是他们的问题,而不是你的问题。
答案 1 :(得分:1)
该类别不知道方法newsloop
存在于类中,因为它未在头文件中声明;仅限于私人类别。这就是你得到警告的原因。您应该在头文件或类实现的协议中声明该方法。