Objective-C方法调用类别问题

时间:2011-09-08 15:36:13

标签: objective-c

我已经扩展了一个类,用于处理解析特定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')

为什么会引起警告,因为如果我是对的,类别可以访问他们正在扩展的类中定义的所有方法。

2 个答案:

答案 0 :(得分:2)

编译器仍然需要知道newsloop方法(或选择器)存在。在编译类别文件时,此方法尚未在任何地方声明,因此会生成警告。

如果要保持此方法的私有性,则应创建一个ListBuilder + Private.h文件,在其中声明任何共享私有方法,并将其包含在ListBuilder.m和ListBuilder + XMLParser类别中。

从技术上讲,代码的用户可以自己包含标题并调用方法,但是还有其他方法可以做到这一点,因为Objective-C中没有私有/公共方法。此外,包括一个标题为'Private'并调用方法是他们的问题,而不是你的问题。

答案 1 :(得分:1)

该类别不知道方法newsloop存在于类中,因为它未在头文件中声明;仅限于私人类别。这就是你得到警告的原因。您应该在头文件或类实现的协议中声明该方法。