0

以下适用于 iOS4.0 及更高版本,但在使用基本 iOS3.2 构建时,我收到错误“找不到 'NSXMLParserDelegate' 的协议声明”谢谢

    #import <Foundation/Foundation.h>

    #if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_4_0
@interface MyClass: NSObject <NSXMLParserDelegate>

    #else

@interface MyClass: NSObject

    #endif

{
    ...
}
4

2 回答 2

2

我认为您更大的问题是您仍在尝试支持 iOS 3.2。几乎所有人都放弃了对它的支持(包括 Apple,因为 iOS 6 SDK 支持的最低 iOS 目标是 4.3)

于 2013-06-22T20:05:44.787 回答
0

该协议是iOS4之前的非正式协议,基本上意味着所有方法都是@optional

采用的协议的声明只是让编译器高兴,所以在这种情况下不要这样做。

@interface MyClass: NSObject 

而不是试图在编译时将类设置为符合协议,而是在运行时进行。

-(BOOL)conformsToProtocol:(Protocol *)aProtocol
{
    NSString *protocolName = NSStringFromProtocol(aProtocol);

    if ([protocolName isEqualToString:@"NSXMLParserDelegate"]) {
        return YES;
    }

    return [super conformsToProtocol:aProtocol];

}

-(void)setupParser
{


    myParser = [[NSXMLParser alloc] initWithContentsOfURL:whatever];

    //cast as id to shut the compiler warning up    
    myParser.delegate = (id)self;


}

-(BOOL)conformsToProtocol:(Protocol *)aProtocol可能不需要覆盖,但它可能不会受到伤害。

于 2013-06-22T21:18:13.750 回答