2010-07-23 4 views
0

J'ai rétréci cette erreur (qui bloque mon application):iPhone: message envoyé à l'erreur d'instance désallouées

-[NSConcreteMutableData release]: message sent to deallocated instance 0x6eaed40 

au code suivant:

emailData = [kmlDoc dataUsingEncoding:NSUTF8StringEncoding]; 

Mais, je ne peux pas comprendre pourquoi cette erreur est provoquée? Cette ligne définit simplement une très grande chaîne à un objet NSData. Je libère emailData dans la méthode dealloc.

Qu'est-ce qui ne va pas ici?

+0

Ok, il semble que la suppression des emails de la méthode dealloc résout le problème. Mais pourquoi? NSData autorelease? –

Répondre

9

Vous devez prendre possession de l'objet:

emailData = [[kmlDoc dataUsingEncoding:NSUTF8StringEncoding] retain]; 

ou en utilisant conserver/copier des propriétés:

self.emailData = [kmlDoc dataUsingEncoding:NSUTF8StringEncoding]; 

Rappelez-vous que vous avez explicitement de prendre possession des objets retournés par des méthodes qui ne contiennent ni new, alloc, retain ou copy dans leur nom lorsqu'ils retournent des instances de libération automatique.

Voir le Memory Management Guide pour plus d'informations.

+0

Merci d'avoir éclairci cela. J'ai utilisé self.emailData et cela a résolu mon problème. –

Questions connexes