我的头文件定义如下:
#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无济于事。
任何帮助都将不胜感激。
由于
答案 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>
请务必在实施中实施适当的方法。