2010-06-03 14 views
6

Mi archivo de cabecera se define así:NSXMLParserDelegate compilar problema - iPhone SDK 30. vs 4.0

#import <Foundation/Foundation.h> 

@interface Warning: NSObject { 

En mi archivo .m lo hago:

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

Esto compila y funciona bien bajo 3.0.

Si intento compilar con 4,0 consigo este error:

does not implement the 'NSXMLParserDelegate' protocol

Si añado:

@interface Warning: NSObject <NSXMLParserDelegate> { 

Se compila bien con 4.0, pero cuando intento compilar con 3,0 consigo :

error: cannot find protocol declaration for 'NSXMLParserDelegate'

El marco de base se encuentra correctamente. Agregar NSXMLParser.h no ayuda.

Cualquier ayuda sería apreciada.

Gracias

Respuesta

4

De acuerdo con la documentación de referencia de la biblioteca, NSXMLParser no requiere una aplicación estricta NSXMLParserDelegate:

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

cheques NSXMLParser necesarios métodos de delegado disponibilidad sobre la marcha.

Si NSXMLParser se requieren la plena aplicación NSXMLParserDelegate, los descriptores de acceso serían:

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

supongo que por eso no existe un protocolo NSXMLParserDelegate realidad se define en el marco.

Por lo tanto, esa interfaz me parece correcto:

#import <Foundation/Foundation.h> 

@interface Warning: NSObject { 

Todo lo que tiene que hacer es poner en práctica la delegate methods lo necesario para.

Editar:

Usted podría tratar de usar macros del preprocesador para activar o desactivar la declaración del uso de protocolos:

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

no probé esto con 4.0, pero trabajado en otro ejemplo entre 3,1 y 3.2

+0

Gracias he aplicado los métodos de delegado que necesito: - (void) analizador: foundCharacters (NSXMLParser *): analizador - (void) analizador: (NSXMLParser *) analizador didStartElement: - (void) analizador: (NSXMLParser *) analizador didEndElement: – stoutyhk

+0

Pero el compilador todavía se queja bajo 4.0 – stoutyhk

+0

Lo siento, he entendido mal el problema. Respuesta editada. –

2

que era capaz de solucionar esto con:

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

Solo asegúrese de implementar los métodos apropiados en su implementación.