J'utilise XCode6 beta et j'essaie Swift. Lorsque je mets des contraintes de disposition automatique dans un contrôleur de vue, l'application se bloque avec l'erreur suivante: Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'
Vous obtenez cette erreur car vous avez défini une contrainte sur un IBOutlet qui est supprimé au moment de l'exécution. Cela se produit lorsque vous définissez la contrainte comme espace réservé dans Interface Builder. Puisque la contrainte est supprimée, lorsqu'elle va la désarchiver, elle génère une erreur indiquant qu'elle ne peut pas le faire.
Il existe deux façons de corriger cela.
placeholder="YES"
.Voici à quoi cela devrait ressembler:
En supposant que vous vouliez réellement que la contrainte soit un espace réservé, vous devrez supprimer toutes les prises de référence. Pour ce faire, sélectionnez la contrainte que vous souhaitez être un espace réservé. Ouvrez ensuite l'inspecteur de connexions (le bouton le plus à droite qui ressemble à ceci: (->)), puis supprimez toutes les prises de référence pouvant exister sur cette contrainte.
J'ai eu le même problème tout à l'heure et ce qui suit a fonctionné pour moi.
J'ai publié une version de travail de mon application sur l'App Store, je suis revenue pour y travailler quelques jours plus tard en appuyant sur l'un de mes onglets dans l'UITabBarController, il s'est écrasé avec l'erreur:
Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'
Je n'avais aucune contrainte de disposition d'espace réservé que je connaissais ou des sorties de contrainte qui n'auraient pas dû être définies.
La solution pour moi était de simplement désactiver les classes de taille et de conserver les données de classe de taille pour iPhone (l'application est uniquement pour iPhone). Cela a dû supprimer tout ce que j'avais manqué dans les classes de taille. Je veux des classes de taille, je les ai donc réactivées et l'application a à nouveau fonctionné.
Il y a eu un problème avec l'utilisation des classes de taille. J'ai désactivé cette option dans les propriétés du storyboard et n'utilise que la mise en page automatique. Ce n'était pas un gros problème car l'application est uniquement pour iPhone.
Ce qui m'est finalement arrivé, c'est que j'ai coupé une sous-vue à l'intérieur d'Interface Builder pour la copier dans un autre xib. Cela a laissé la sous-vue dans le générateur d'interface xib d'origine avec elle grisée. Après avoir supprimé la sous-vue de son emplacement d'origine (en sélectionnant et en supprimant). J'ai pu me débarrasser de l'erreur.
Il y a une option dans la fenêtre de l'inspecteur lorsque vous sélectionnez le fichier xib qui n'utilisera pas les contraintes sous "Afficher le fichier de l'inspecteur" dans l'inspecteur appelé "Utiliser la mise en page automatique".
J'ai apporté une modification à une vue de défilement afin qu'elle permette aux commandes du sélecteur intégrées de fonctionner correctement en utilisant une solution que j'ai trouvée ailleurs dans Stackoverflow. Mon nouveau storyboard a simplement ajouté ces attributs à la vue de défilement, ce qui me semblait bien.
delaysContentTouches="NO" canCancelContentTouches="NO"
Mais en plus, j'ai vu dans mon storyboard dans une autre scène le nouveau fragment suivant:
<variation key="default">
<mask key="subviews">
<exclude reference="86H-aM-wei"/>
</mask>
</variation>
Je ne sais pas d'où ça vient. Au début, je l'ai ignoré parce que tout semblait fonctionner sur ma machine de développement. Mais lorsque la version a été construite en version Release et testée, j'ai eu le plantage. La suppression de ce fragment parasite (?) A corrigé le crash et n'a semblé avoir aucun impact sur autre chose.
J'ai eu ce problème lorsque j'avais un bouton dans une UICollectionViewCell personnalisée et que j'avais certaines de ses contraintes en tant qu'IBOutlets sur cette classe. J'ai déplacé le bouton de la cellule vers le contrôleur de vue parent et les IBOutlets étaient toujours référencés dans la cellule mais n'existaient pas réellement sur la cellule, alors tout a explosé. Juste besoin de supprimer ces IBOutlets et tout a bien fonctionné à nouveau!