Je suis confronté à un problème qui me rend fou. J'ai regardé d'autres forums et mon code semble être correct, mais il échoue lors de l'appel de la méthode addObject pour NSMutableArray. Je suis une simple classe de mise en œuvre de l'analyseur XML et stocker certaines informations dans un NSMutableArray:addObject pour NSMutableArray se bloque!
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if([elementName isEqualToString:@"Image"]){
[images setObject: [[imageFile copy] autorelease] forKey: [NSNumber numberWithInt: imageId]];
return;
}
if([elementName isEqualToString:@"Annotation"]){
//Here create the annotation object
Annotation *newAnnot = [[Annotation alloc] init];
newAnnot.imageId = imageId;
newAnnot.annDescription = [[annDescription copy] autorelease];
newAnnot.annLocation = [[annLocation copy] autorelease];
[annotations addObject: newAnnot];
[newAnnot release];
return;
}
if([elementName isEqualToString: @"Patient"] || [elementName isEqualToString: @"Images"] || [elementName isEqualToString: @"Annotations"]){
[currentSection setString: @""];
}else {
[currentElement setString: @""];
}
}
[annotations addObject: newAnnot] fait la demande pour recevoir un signal SIGABRT!
2010-11-08 17:15:00.786 Touches[1430:207] *** -[NSCFDictionary addObject:]: unrecognized selector sent to instance 0x4b1bb50 2010-11-08 17:15:00.788 Touches[1430:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFDictionary addObject:]: unrecognized selector sent to instance 0x4b1bb50' 2010-11-08 17:15:00.789 Touches[1430:207] Stack: (
42174544,
43332396,
42183259,
41645686,
41642482,
18858,
39384333,
70873863,
70897681,
39381417,
17100,
8863,
2234926,
38538931,
38537114,
2234111,
38538931,
38544407,
38545466,
38538931,
38537114,
2230794,
2239193,
103026,
108372,
134462,
115959,
147928,
44216700,
41453724,
41449640,
107041,
140146,
8296) terminate called after throwing an instance of 'NSException' Program received signal: “SIGABRT”. (gdb) continue Program received signal: “SIGABRT”.
Voici une brève description du code:
Annotation est une simple classe dérivée de NSObject. J'applique des méthodes init et dealloc. Le premier ne fait rien, juste retourne « soi » alors que dealloc invoque parent et libère les 2 chaînes
@interface Annotation : NSObject {
int imageId;
NSString *annDescription;
NSString *annLocation;
}
@property (nonatomic, assign) int imageId;
@property (nonatomic, retain) NSString *annDescription;
@property (nonatomic, retain) NSString *annLocation;
Rien étrange que ici. Alors jetez un oeil à la classe qui implémente l'analyse syntaxique:
@interface PatientBundle : NSObject <NSXMLParserDelegate> {
//............
NSMutableArray *annotations;
//.............
}
@property (nonatomic, retain) NSMutableArray *annotations;
Ma méthode init ressemble à ceci:
- (id) initFromFile: (NSString*)pathToFile{
//.....
annotations = [[NSMutableArray alloc] initWithCapacity: 10];
[addressParser setDelegate:self];
//......
}
Debugging suggère l'objet que je suis d'ajouter dans le tableau « annotations » n'est pas nul, mais Je suis incapable d'insérer même le premier. Pourquoi ai-je une exception NSInvalidArgumentException? Pourquoi NSCFDictionary: addObject si mon tableau est de classe NSMutableArray? Est-ce que quelque chose à propos de l'utilisation de NSMutableArray est manquant?
Mes coordonnées plate-forme: - Exécution iPhone Simulator Version 4.1 (225) - SDK Base et cible de déploiement: iOSDevice 4.1 (cible IPAD) - GCC 4.2
Un indice sera bien voulu appréciée. Merci d'avance.
Luis
Ce qui se passe n'est pas visible depuis le code que vous avez posté. D'une certaine manière 'annotations' est un NSDictionary au lieu d'un tableau; le pointeur est probablement écrasé. –
Votre propriété annotations est en lecture/écriture, pas en lecture seule, comme je l'attendrais pour un mutableArray créé dans l'init de la classe. Pourquoi? Peut-être que vous appelez accidentellement le setter quelque part? –