1

J'ai créé deux contrôleurs de vue, disons A et B avec storyboard et ARC. VC A appelle B par performSegueWithIdentifier et B revient à A par dismissViewControllerAnimated. Cela fonctionne bien, jusqu'à ce que je simule un Memory Warning pendant que je suis dans VC B. Si je fais ça, mon application se bloque avecEXC_BAD_ACCESS dans le storyboard loadAffichage après l'avertissement de la mémoire

Thread 1: EXC_BAD_ACCESS (code=1, address=0x...) 

Dès que je l'exercerai dismissViewControllerAnimated. Pour le débogage j'ai ajouté mon propre loadView à A (juste avec un NSLog et [super loadView]) et je peux voir, qu'il est appelé et l'application se bloque dans [super loadView].

Je sais, que la hiérarchie de vue de A a été détruite causée par l'avertissement de la mémoire. Mais si je comprends la documentation, il devrait être automatiquement recréé quand il est accédé après dismissViewControllerAnimated de B. Au moment de loadView non de mon code devrait fonctionner, tout sera initialisé dans viewDidLoad et viewWillAppear et aucun d'entre eux est appelé avant le crash. Est-ce que quelqu'un a des suggestions sur la façon de déboguer davantage, ou comment obtenir l'identité de la mauvaise adresse avant qu'elle ne devienne mauvaise?

Répondre

0

Essayez d'utiliser la forte presentingViewController

par exemple:

@property (forte, nonatomic) CameraViewController * myCVC;

0

Avez-vous trouvé le problème après la reconstruction du contrôleur de vue A objet par objet. Dans A j'utilise un UIPanGestureRecognizer et un UITapGestureRecognizer. L'ajout de ces deux objets sur le storyboard a également ajouté deux lignes à viewDidUnload en réglant les deux reconnaissances à zéro lors du déchargement de la vue de A. Pour ... GestureRecognizer qui semble être un bug. Supprimer ces deux lignes a résolu le problème.

Questions connexes