2010-06-03 16 views
6

Meine Header-Datei definiert ist, wie folgt aus:NSXMLParserDelegate kompilieren Problem - iPhone SDK 30 vs 4.0

#import <Foundation/Foundation.h> 

@interface Warning: NSObject { 

In meiner .m-Datei ich:

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

Dies kompiliert und arbeitet unter ganz gut 3.0.

Wenn ich versuche, mit 4.0 zu kompilieren ich diesen Fehler:

does not implement the 'NSXMLParserDelegate' protocol

Wenn ich hinzufügen:

@interface Warning: NSObject <NSXMLParserDelegate> { 

Es mit 4,0 fein kompiliert, aber wenn ich mit 3.0 zu kompilieren versuchen ich :

error: cannot find protocol declaration for 'NSXMLParserDelegate'

Das Foundation-Framework wird korrekt gefunden. Das Hinzufügen von NSXMLParser.h hilft nicht.

Jede Hilfe wäre willkommen.

Dank

Antwort

4

Gemäß der Bibliothek Referenzdokumentation, hat NSXMLParser keine strenge NSXMLParserDelegate Implementierung erfordern:

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

NSXMLParser prüft Delegatmethoden Verfügbarkeit im laufenden Betrieb benötigt.

Wenn NSXMLParser wurde eine NSXMLParserDelegate vollständige Umsetzung erforderlich ist, würden die Accessoren sein:

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

Ich denke, das ist, warum eigentlich im Rahmen definiert kein NSXMLParserDelegate Protokoll gibt.

So scheint die Schnittstelle mir richtig:

#import <Foundation/Foundation.h> 

@interface Warning: NSObject { 

Alles, was Sie tun müssen, ist, implementieren die delegate methods Sie müssen für.

Edit:

Sie könnten versuchen, Präprozessormakros mit aktivieren oder die Protokollverwendung Erklärung zu deaktivieren:

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

ich das nicht versucht hat, mit 4,0, aber es funktionierte auf einem anderen Beispiel zwischen 3,1 und

3.2
+0

Dank ich die Delegatmethoden implementiert habe ich brauche: - (void) Parser: (NSXMLParser *) Parser Foundcharacters: - (void) Parser: (NSXMLParser *) Parser didStartElement: - (void) Parser: (NSXMLParser *) Parser didEndElement: – stoutyhk

+0

Aber der Compiler klagt immer noch unter 4.0 – stoutyhk

+0

Sorry, ich habe das Problem falsch verstanden. Antwort bearbeitet. –

2

konnte ich dieses Problem beheben mit:

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

Stellen Sie sicher, dass Sie die geeigneten Methoden in Ihrer Implementierung implementieren.