presentViewController: crash sur iOS <6 (AutoLayout)


92

C'est un crash bizarre que je reçois. Le crash se produit lorsque j'appuie sur un bouton qui va à un certain ViewController. La ligne sur laquelle il plante est:

DestinationInformationViewController *info = [[DestinationInformationViewController alloc] init];
[info setModalTransitionStyle: UIModalTransitionStyleCrossDissolve];
[self presentViewController:info animated:YES completion: nil]; // CRASHES HERE
[info release];

La trace de crash est:

*** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named NSLayoutConstraint' *** First throw call stack: (0x3758288f 0x35287259 0x37582789 0x375827ab 0x3153d54d 0x3153d6bb 0x3153d423 0x314ce001 0x3143c3c7 0x31319c59 0x3128fc17 0x3129a267 0x3129a1d5 0x3133959b 0x31338367 0x84091 0x374dc3fd 0x31271e07 0x31271dc3 0x31271da1 0x31271b11 0x31272449 0x3127092b 0x31270319 0x31256695 0x31255f3b 0x33c9822b 0x37556523 0x375564c5 0x37555313 0x374d84a5 0x374d836d 0x33c97439 0x31284cd5 0x82bb3 0x71200) terminate called throwing an exception(gdb) Could not instantiate class named NSLayoutConstraint

REMARQUE: cela se bloque sur mon iPhone 4 iOS 5.1 mais pas sur mon iPhone 4S iOS 6 Beta 2


2
J'ai eu le même problème après la mise à niveau vers Xcode 4.5 en cours d'exécution et l'application sur iPhone 5.1 Regardez ce lien: artstudioh.com/calculator/images/error_xcode.png
Sinuhe Huidobro

Oui, je pense que nous l'avons établi :)
MCKapur

Réponses:


201

Je pense que c'est un problème avec le nouveau constructeur d'interface de Xcode. Avez-vous construit votre .xib en utilisant le constructeur d'interface de Xcode 4.5? J'ai rencontré le même problème tout à l'heure, et je pense que c'est le problème. Mon application fonctionne sur iOS 6, mais rien de plus ancien.

Et vous devez vous assurer que vous éteignez Use Auto Layoutvos xibs .

Cela peut être fait par:

  1. Ouvrez votre fichier xib.
  2. Allez dans l' File Inspectoronglet.
  3. Trouvez la Interface Builder Documentsection dans la barre d'outils de droite.
  4. Décochez l' Use Auto Layoutoption.

37
Ouais, vous devez vous assurer de désactiver "utiliser la disposition automatique" pour vos pointes.
Wevah

Oui, même problème. Que faire? Dois-je le tester sur Xcode 4.4 (Cela pourrait être la raison, pour une raison étrange, mon iPhone 4 iOS 5.1 peut fonctionner sur Xcode 4.5 ... même si ce n'est pas iOS 6)
MCKapur

16
Dans la vue principale de votre xib, section Document du générateur d'interface dans la barre d'outils de droite.
Mark

Pour toute personne intéressée, j'ai créé un fichier nib dans Xcode 4.5 pour un ancien contrôleur de vue qui configure sa vue par programme. J'ai vite réalisé que ma nouvelle pointe ne fonctionnerait pas sous iOS 5, j'ai donc supprimé le fichier nib et j'ai commencé à obtenir une erreur similaire, même si le nouveau fichier nib ne faisait plus partie de mon projet! La solution était de renommer les fichiers .h et .m, euh.
Keller

2
Un peu d'inquiétude sur ce qui arrive au contrôle qualité chez Apple ces jours-ci.
ardochhigh

43

Capture d'écran

J'ai eu le même problème lorsque j'ai téléchargé la nouvelle mise à jour XCode et le SDK IOS6. Voici comment je l'ai résolu:

Sélectionnez le fichier de création d'interface (qu'il s'agisse d'un fichier xib ou de storyboard) où votre erreur se produit. Dans l'éditeur assistant à droite dans XCode, sélectionnez le premier onglet à partir de la gauche, et il y a une case à cocher pour l'option "Utiliser la mise en page automatique" comme sur la capture d'écran ci-dessus. Décochez la case.


4

Nagaraja demande "Comment résoudre la même chose si nous n'utilisons pas xib? J'ai rencontré exactement ce problème. J'ai créé un contrôleur avec un xib, puis j'ai décidé de supprimer le fichier xib. Le crash n'a pas disparu. Le problème était que j'avais besoin de mettre en œuvre

- (void) loadView

dans ma classe de contrôleur. Une fois que j'ai implémenté cette méthode, le problème a été résolu.


1

Une autre raison possible d'un crash avec presentViewController est d'avoir quelque chose dans la pointe connecté à une variable qui n'est plus là - la variable ayant son nom changé ou elle a été supprimée.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.