2010-09-07 2 views
0

J'ai un problème très frustrant.
Lorsque j'essaie de libérer l'objet NSKeyedUnarchiver après le décodage d'un NSArray, une erreur «EXC_BAD_ACCESS» se produit.
Mais quand je ne le libère pas ou ne décode pas d'autre objet (par exemple NSString) tout va bien.
Je ne comprends pas ... Pour moi, il semble que la méthode "decodeObjectForKey" change quelque chose dans l'objet "décodeur" (mais pas toujours?!). Et dans le débogueur, la seule variable qui change après l'appel de cette méthode est "_replacementMap". Mais je n'ai aucune idée de comment réparer ce bug.
J'espère que vous pouvez m'aider.
est un exemple de code ici:NSKeyedUnarchiver se bloque après le décodage d'un tableau

+ (NSArray *)decodeArticles { 
NSString *archivePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"Articles.archive"]; 
NSData *decoderData = [[NSData alloc] initWithContentsOfFile:archivePath]; 
NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:decoderData]; 

NSArray *savedArticles = [[decoder decodeObjectForKey:@"articles"] copy]; 
if (!savedArticles) { 
    savedArticles = [[NSArray alloc] init]; 
} 

[decoder finishDecoding]; 
//[decoder release]; 

return savedArticles; 

}

+0

Vous devez montrer deux choses supplémentaires: le code où vous utilisez votre méthode 'decodeArticles' et la trace de la pile de ce crash. –

Répondre

0

Quelques autres choses: 1. nécessité de libérer le decoderData; devrait être capable de le faire après l'initialisation du décodeur; pense que l'analyseur statique devrait le signaler. 2. essayez de déplacer [Decoder finishDecoding]; [libération du décodeur]; avant le bloc if 3. convention pourrait vous suggérer de renvoyer un objet autoreleased puisque l'implémentation est une méthode de classe. vous pourriez envisager d'ajouter un argument chemin à la méthode. 4. changer la copie pour autorelease. 5. les objets de votre tableau peuvent affecter le processus d'encodage. ce qui peut expliquer pourquoi certains objets "standard" encodent et décodent comme vous le souhaitez.

Questions connexes