4 votes

EXC_BAD_ACCESS lorsqu'on appelle popViewControllerAnimated dans une application basée sur la navigation

Je ne parviens pas à comprendre pourquoi j'ai un crash lorsque je reviens à la vue précédente dans la pile de navigation. La chose est que j'utilise une barre de navigation personnalisée (l'originale est masquée et mes boutons personnalisés déclenchent la navigation - push et pop - à la place).

Trace que je reçois:

Program received signal:  “EXC_BAD_ACCESS”.

#0  0x011a4a60 in objc_msgSend
#1  0x0044e37c in -[UIImageView(UIImageViewInternal) _canDrawContent]
#2  0x003bf3df in -[UIView(Internal) _didMoveFromWindow:toWindow:]
#3  0x003bf1b0 in -[UIView(Internal) _didMoveFromWindow:toWindow:]
#4  0x003bf1b0 in -[UIView(Internal) _didMoveFromWindow:toWindow:]
#5  0x003bdfc4 in -[UIView(Hierarchy) _postMovedFromSuperview:]
#6  0x003b6dfc in -[UIView(Internal) _addSubview:positioned:relativeTo:]
#7  0x003b514f in -[UIView(Hierarchy) addSubview:]
#8  0x005ca471 in -[UINavigationTransitionView transition:fromView:toView:]
#9  0x005c9ed5 in -[UINavigationTransitionView transition:toView:]
#10 0x0043c606 in -[UINavigationController _startDeferredTransitionIfNeeded]
#11 0x0043c292 in -[UINavigationController _popViewControllerWithTransition:allowPoppingLast:]
#12 0x0043bfa9 in -[UINavigationController popViewControllerWithTransition:]
#13 0x0043f62b in -[UINavigationController popToViewController:transition:]
#14 0x000124fa in -[BaseViewController bottomNavigationFiredController:] at BaseViewController.m:187

3voto

Sabby Points 1806

J'avais rencontré le même problème qui pourrait être dû au fait que votre dernière vue n'est plus conservée. La meilleure façon pourrait être d'essayer de conserver votre vue précédente en définissant et en la synthétisant.

Ensuite, essayez d'utiliser

[self.navigationConroller popViewControllerAnimated:YES];

ou de revenir à la vue souhaitée

[self.navigationController popToViewController:myview animated:YES];

ou de revenir à la vue racine

[self.navigationController popToRootViewControllerAnimated:YES];

Dites-moi si cela vous aide. Parce que cette erreur survient lorsque vous essayez d'accéder à une vue qui a déjà été libérée.

3voto

Lukasz Points 6474

Il est bon de se rappeler que lorsque le viewcontroller est poussé hors de la pile de navigation (nouveau contrôleur de vue est poussé), même s'il n'est pas libéré lui-même (retenu dans la pile du contrôleur de navigation), sa vue principale est libérée (avec toutes ses sous-vues bien sûr).

Donc ce type de crash pointera principalement vers la gestion de la mémoire de l'interface utilisateur (probablement une double libération d'UIImages autoreleased qui était mon cas;-).

J'espère que cela aidera quelqu'un à comprendre comment UINavigationController gère la mémoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X