2010-04-29 2 views
0

J'ai un UITableViewController en tant que rootViewController pour mon navigateur navigator. Lorsque j'appuie sur une cellule de tableau, je fais ce qui suit:Essayer de comprendre le contrôle de NavigationController pour ViewControllers sur sa pile

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
MessageHistory *msg = (MessageHistory *)[[self fetchedResultsController]objectAtIndexPath:indexPath]; 
ConversationViewController *chatController = [[ConversationViewController alloc]initWithNibName:@"ConversationView" bundle:nil andUser:msg.user]; 
[self.navigationController pushViewController:chatController animated:YES]; 
[chatController release]; 

Mais quand je reviens de la chatController (en utilisant le bouton de retour sur la barre de navigation) je reçois « EXC_BAD_ACCESS »

commentaires

//[chatController release]; 

résout le problème. Comment? Je pensais qu'en poussant à la navigationController ajoute un nombre de retenue et quand pop de lui libérer?
Aussi je crois que si je n'inclue pas la version après avoir poussé sur le contrôleur de nav je génère une fuite.
Une idée de ce qui se passe ici?

+0

Cela ressemble à une instance désallouée. Exécutez votre application avec NSZombieEnabled pour voir à quelle instance vous avez des problèmes. – Vladimir

+1

Merci pour le conseil. Je ne savais pas à propos de NSZombieEnabled, il a aidé comme vous l'avez dit à trouver l'instance désaffectée. Pour ceux qui ne connaissent pas NSZombieEnabled, voici comment l'activer dans xcode: 1. Double-cliquez sur un exécutable dans le groupe Executables de votre projet Xcode. 2. Cliquez sur l'onglet Arguments. 3. Dans la section "Variables à définir dans l'environnement:", créez une variable appelée "NSZombieEnabled" et définissez sa valeur sur "YES". Assurez-vous de supprimer ceci pour la distribution! – sharkan

Répondre

0

J'ai eu ce problème plusieurs fois, et j'ai failli devenir fou en essayant de trouver l'erreur.

Dans mon cas, j'avais une UIWebView dans ma deuxième vue avec le jeu UIViewController en tant que délégué. Dans ma méthode dealloc UIViewController, j'ai oublié de mettre webView.delegate = nil. Lorsque le second UIViewController a été déplacé et donc désalloué, UIWebView envoyait un message à son délégué (le second UIViewController, qui n'existait plus).

Je ne sais pas si cela s'applique à vous, mais je passe des jours à chercher cette erreur, alors peut-être que c'est utile.

+0

Merci pour le partage, même si ce n'était pas mon problème (voir mon commentaire à Vladimir), le vôtre est un scénario que je vais probablement atteindre sur mon projet aussi. Agréable de le garder à l'esprit – sharkan

Questions connexes