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 をサポートしようとしていることだと思います。ほとんどすべての人がそのサポートを中止しました (iOS 6 SDK でサポートされている最も低い iOS ターゲットは 4.3 であるため、Apple を含む)

于 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 に答える