NSXMLParserDelegate编译问题 - iPhone SDK 30. vs 4.0

时间:2010-06-03 13:40:04

标签: iphone

我的头文件定义如下:

#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无济于事。

任何帮助都将不胜感激。

由于

2 个答案:

答案 0 :(得分:4)

根据库参考文档,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之间的另一个例子

答案 1 :(得分:2)

我能够解决这个问题:

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

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