2010-06-03 6 views
6

Mon fichier d'en-tête est défini comme suit:NSXMLParserDelegate compilation problème - iPhone SDK 30. vs 4.0

#import <Foundation/Foundation.h> 

@interface Warning: NSObject { 

Dans mon fichier .m que je fais:

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

Cette compile et fonctionne très bien sous 3,0.

Si je tente de compiler avec 4.0 Je reçois cette erreur:

does not implement the 'NSXMLParserDelegate' protocol

Si j'ajoute:

@interface Warning: NSObject <NSXMLParserDelegate> { 

Il compile très bien avec 4.0, mais lorsque je tente de compiler avec 3.0 je reçois :

error: cannot find protocol declaration for 'NSXMLParserDelegate'

L'infrastructure de base est trouvée correctement. L'ajout de NSXMLParser.h n'aide pas.

Toute aide serait appréciée.

Merci

Répondre

4

Selon la documentation de référence de la bibliothèque, NSXMLParser ne nécessite pas une mise en œuvre stricte NSXMLParserDelegate:

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

contrôles NSXMLParser méthodes délégués nécessaires disponibilité à la volée.

Si NSXMLParser exigeait une mise en œuvre complète NSXMLParserDelegate, les accesseurs seraient:

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

Je suppose que ce pourquoi il n'y a pas de protocole NSXMLParserDelegate effectivement défini dans le cadre.

Ainsi, cette interface me semble correcte:

#import <Foundation/Foundation.h> 

@interface Warning: NSObject { 

Tout ce que vous avez à faire est de mettre en œuvre le delegate methods dont vous avez besoin pour.

Edit:

Vous pouvez essayer d'utiliser des macros préprocesseur pour activer ou désactiver la déclaration d'utilisation du protocole:

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

Je n'ai pas essayer avec 4,0, mais il a travaillé sur un autre exemple entre 3,1 et 3.2

+0

Merci j'ai mis en œuvre les méthodes de délégués dont j'ai besoin: - analyseur (void): (NSXMLParser *) analyseur foundCharacters: - (void) analyseur: (NSXMLParser *) analyseur didStartElement: - (void) parser: (NSXMLParser *) parser didEndElement: – stoutyhk

+0

Mais le compilateur se plaint encore sous 4.0 – stoutyhk

+0

Désolé, j'ai mal compris le problème. Réponse éditée –

2

j'ai pu résoudre ce problème avec:

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

Veillez simplement à implémenter les méthodes appropriées dans votre implémentation.

Questions connexes