Je travaille sur une application iPhone qui effectue une communication avec le serveur à initialiser la première fois qu'il est exécuté. J'ai une classe ServerCommunication avec des méthodes pour chacune des tâches de base à exécuter (authentification d'un utilisateur, obtention d'une clé d'activation, téléchargement de mises à jour, etc.), et une nouvelle instance de ServerCommunication est créée pour chaque tâche; Je ne les réutilise pas, même si ce serait plus efficace."message envoyé à l'instance désaffectée 0xec75b0", mais 0xec75b0 ne devrait même pas être visible
Lorsque l'utilisateur termine le premier écran d'initialisation, ServerCommunication est créé quatre fois. Je le garde avec NSLog(@"Initializing ServerCommunication instance %p", self);
dans sa méthode -init
. Le deuxième écran d'initialisation appelle également ServerCommunication plusieurs fois lorsque l'utilisateur appuie sur le bouton "Suivant", mais sur sa dernière instanciation, l'application se bloque avec le message -[ServerCommunication insertDataIntoLocalDB:]: message sent to deallocated instance 0xec75b0
dans la console. La chose est, 0xec75b0 est l'adresse de la première instance de ServerCommunication que j'ai créé en arrière au premier écran. Pourquoi enverrait-il des messages à cette instance? Je ne les retiens nulle part; ils sont pour la plupart autoreleased. Si cela est utile, toutes les méthodes de cette classe effectuent un téléchargement asynchrone de données XML avec NSURLConnection, puis l'analysent avec NSXMLParser. La méthode de délégué de l'analyseur -(void)parserDidEndDocument:(NSXMLParser *)parser
envoie ensuite des notations NSN qui sont reçues par des méthodes dans mes contrôleurs de vue afin qu'ils sachent si passer à l'écran suivant ou y rester et afficher un message d'erreur.
L'aide est très appréciée!
Vous avez raison! J'avais besoin de 'removeObserver' mes instances ServerCommunication. La plupart de mes notifications sont reçues ailleurs, mais ServerCommunication est enregistré pour celui qui est affiché lorsque l'utilisateur appuie sur "next" sur le deuxième écran. Et puisque toutes mes instances précédentes étaient également enregistrées pour le recevoir (même si elles n'auraient rien fait avec), lorsque la notification a finalement été envoyée à la fin du deuxième écran, je suppose que NSNotificationCenter a essayé de l'envoyer à tous cas précédents (dont aucun n'existait plus). Merci beaucoup! –
Cela a résolu mon problème de plantage! – lnguyen55