【问题标题】:NSXMLParserDelegate compile problem - iPhone SDK 30. vs 4.0NSXMLParserDelegate 编译问题 - iPhone SDK 30. vs 4.0
【发布时间】:2010-06-03 13:40:04
【问题描述】:

我的头文件是这样定义的:

#import <Foundation/Foundation.h>

@interface Warning: NSObject  { 

在我的 .m 文件中:

NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];

这在 3.0 下编译和工作得很好。

如果我尝试使用 4.0 进行编译,我会收到此错误:

没有实现 'NSXMLParserDelegate' 协议

如果我添加:

@interface Warning: NSObject <NSXMLParserDelegate>  { 

使用 4.0 可以正常编译,但是当我尝试使用 3.0 编译时,我得到:

错误:找不到协议 'NSXMLParserDelegate' 的声明

Foundation 框架已正确找到。添加 NSXMLParser.h 没有帮助。

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: iphone


    【解决方案1】:

    根据库参考文档,NSXMLParser 不需要严格的 NSXMLParserDelegate 实现:

    - (void)setDelegate:(id)delegate
    - (id)delegate
    

    NSXMLParser 即时检查所需委托方法的可用性。

    如果 NSXMLParser 需要一个完整的 NSXMLParserDelegate 实现,那么访问器将是:

    - (void)setDelegate:(id<NSXMLParserDelegate>)delegate
    - (id<NSXMLParserDelegate>)delegate
    

    我想这就是为什么框架中没有实际定义 NSXMLParserDelegate 协议的原因。

    所以,那个界面对我来说似乎是正确的:

    #import <Foundation/Foundation.h>
    
    @interface Warning: NSObject  { 
    

    您所要做的就是实现您需要的delegate methods

    编辑:

    您可以尝试使用预处理器宏来激活或停用协议使用声明:

    #if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_4_0
    @interface Warning: NSObject <NSXMLParserDelegate>
    #else
    @interface Warning: NSObject
    #endif
    {
       // interface definition ...
    

    我没有在 4.0 上尝试过这个,但它在 3.1 和 3.2 之间的另一个示例中有效

    【讨论】:

    • 谢谢我已经实现了我需要的委托方法: - (void)parser:(NSXMLParser *)parser foundCharacters: - (void)parser:(NSXMLParser *)parser didStartElement: - (void)parser :(NSXMLParser *)parser didEndElement:
    • 但是4.0下编译器还是报错
    • 啊,明白了。谢谢。不过还是有问题。我的最低版本为零:最低版本:0.000000 我需要找到它的设置位置。非常感谢。
    • 如果您不知道具体问题,请不要回复。仅在编译时定义工作。作者需要在运行时区分这一点,并使编译器也满意。
    【解决方案2】:

    我能够解决这个问题:

    #if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_4_0
    @protocol NSXMLParserDelegate
    @end
    #endif
    @interface Warning: NSObject <NSXMLParserDelegate>
    

    请务必在您的实现中实现适当的方法。

    【讨论】:

      猜你喜欢
      • 2011-07-27
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多