2010-11-08 8 views
0

Désolé pour mon mauvais anglais. Je viens d'Allemagne et j'ai quelques problèmes avec l'analyse de mon fichier xml. J'utilise la dernière version du SDK iOS, y compris Xcode.L'analyse XML provoque l'erreur

Parsing mon fichier xml provoque une erreur bien connue, appelée « Demande de membre « tranches » dans quelque chose pas une structure ou d'une union »

Semble que je l'ai oublié quelque chose, mon initialisation Delgegate classe? Serait génial si quelqu'un pouvait m'aider à traverser. Ce est la seule erreur que je reçois ... narrf ..

Voici une partie du code, pertinent pour ce problème:

Mon XMLParser .h Fichier

#import <UIKit/UIKit.h> 

@class XMLAppDelegate, Slice; 

@interface XMLParser : NSObject <NSXMLParserDelegate>{ 

    NSMutableString *currentElementValue; 

    XMLAppDelegate *appDelegate; 
    Slice *aSlice; 
} 

- (XMLParser *) initXMLParser; 

@end 

Et voici quelques parties de le fichier .m qui montre l'erreur:

#import "XMLParser.h" 
#import "XMLAppDelegate.h" 
#import "Slice.h" 

@implementation XMLParser 

- (XMLParser *) initXMLParser { 
    [super init]; 
    appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    return self; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
    attributes:(NSDictionary *)attributeDict { 

    if([elementName isEqualToString:@"Channel"]) { 
     //Initialize the array. 
     appDelegate.slices = [[NSMutableArray alloc] init]; 
    } 
    else if([elementName isEqualToString:@"Slice"]) { 

     //Initialize the slice. 
     aSlice = [[Slice alloc] init]; 

     //Extract the attribute here. 
     aSlice.sliceID = [[attributeDict objectForKey:@"id"] integerValue]; 

     NSLog(@"Reading id value :%i", aSlice.sliceID); 
    } 

    NSLog(@"Processing Element: %@", elementName); 
} 

l'erreur apparaît après que j'essaie d'utiliser le tableau de tranches de mon délégué.

Serait génial si quelqu'un sait quoi faire, cette petite chose me rend malade. ^^

Répondre

0

L'analyse du fichier XML n'a rien fait, parce que vous n'avez pas été aussi loin. Votre programme analysera seulement XML quand il s'exécute; votre code n'a pas encore été exécuté, car il ne compile pas.

L'erreur est dans la compilation (c'est pourquoi vous la voyez dans Build Results), et est une erreur de syntaxe: Vous avez essayé d'utiliser un nom que le compilateur ne reconnaît pas comme valide pour l'endroit où vous avez utilisé il.

Plus précisément:

 appDelegate.slices = [[NSMutableArray alloc] init]; 

Le compilateur ne sait pas que appDelegate possède une propriété slices; en tant que tel, il retombe sur ses racines C et se plaint que vous essayez de faire un accès structure à quelque chose qui n'est pas une structure. Vous montrez dans votre code que vous avez importé l'en-tête pour la classe AppDelegate, donc le problème doit être que vous n'avez pas déclaré la propriété slices dans @interface de cette classe.

+0

Salut, merci pour la réponse rapide. – DevZarak

+0

j'ai vérifié ma classe Delegate un il semble que je l'ai déclaré la propriété tranches: #import @interface XMLAppDelegate: NSObject { UIWindow * fenêtre; UINavigationController * navigationController; \t \t NSMutableArray * tranches; } @property (nonatomic, retain) Fenêtre IBOutlet UIWindow *; @property (nonatomic, retain) IBOutlet UINavigationController * navigationController; @property (nonatomic, retain) IBOutlet NSMutableArray * tranches; @end – DevZarak

+0

Cela semble juste, l'incapacité de mettre en forme le code dans les commentaires de côté, mais le problème demeure: Le compilateur ne sait pas que l'objet que vous essayez d'utiliser possède la propriété que vous essayez d'utiliser.Soit l'erreur est sur une ligne de code que vous n'avez pas montrée (je remarque que le message d'erreur dans votre question dit "tranches" plutôt que "tranches"), ou vous n'avez pas réellement importé l'en-tête dans votre code réel, ou vous n'avez pas déclaré la propriété dans l'en-tête dans votre code réel. Je suis actuellement penché vers # 1. Notez que vous pouvez double-cliquer sur les erreurs de construction pour accéder au code du problème. –

Questions connexes