Xcode - Comment réparer 'NSUnknownKeyException', la raison: "ce cours n'est pas la valeur de la clé de codage conforme à la touche X" erreur?
J'essaie de relier un UILabel
avec un IBOutlet
créé dans ma classe.
Mon application plante avec l'erreur suivante.
Qu'est-ce que cela signifie?
Comment puis-je résoudre ce problème?
*** Fin de l'app en raison de uncaught exception 'NSUnknownKeyException', la raison: '[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]: cette classe n'est pas la valeur de la clé de codage conforme à la clé XXX.'
Grâce.
- pedrotorres est droit. Oui, c'est le droit. Si vous faites un UITableViewCell, de l'IB n'oubliez pas de faire le Propriétaire du Fichier à NSObject, et la UITableViewCell'Class à l' .h classe que vous avez défini.
- Lorsque vous rencontrez un tel problème et les principales infractions est une action plutôt que prise ensuite, la plupart vous avez probablement une prise qui, à tort, les références de votre action nom de la fonction à la place de votre prise nom de la variable.
- Vous remarquerez que le nom de la clé dans le message d'erreur (l'OP est de l'appeler "XXXX") est le nom que vous avez donné à quelque chose dans votre fichier nib. Cela devrait aider à affiner votre recherche.
- J'ai déposé rdar://22105925 demander à Apple de faire ces erreurs de plus en plus évidents au moment de la construction. 🙂
- comment fait IMMÉDIATEMENT RÉSOUDRE le problème! stackoverflow.com/a/13812660/294884 fantastique astuce
- J'ai eu un tableau personnalisé ligne de contrôleur de classe définie comme une sous-classe de la mauvaise classe. Un autre
d'oh
moment. - Une autre chose à regarder dehors pour est délégué de classe. Par exemple, votre point de vue est de coutume de classe X, mais vous l'utilisez comme une superposition d'un UIImagePickerController, pour qui votre contrôleur est un délégué. Votre contrôleur aurez besoin pour avoir des propriétés pour les points de vente référencés. Je me suis pris par ce récemment.
- Okey donc mon problème n'a rien à voir avec les fichiers xib, parce que j'ai fait ne pas les utiliser dans mon projet. J'essayais juste pour ajouter une touche à un NSDictionary objet et eu cette erreur. S'est avéré la façon dont j'ai été l'ajout d'objets à la NSDictionary était faux.
- Je pense que ce commentaire "Si vous faites un UITableViewCell, de l'IB n'oubliez pas de faire le Propriétaire du Fichier à NSObject, et la UITableViewCell'Class à l' .la classe h vous avez défini" doit être une autre réponse.
- Dans mon cas, il déclenche une erreur à cause de Module xib est différent, j'avais copié le même xib à partir d'une autre cible.
Vous devez vous connecter pour publier un commentaire.
Votre point de vue contrôleur peut avoir la mauvaise classe dans votre xib.
J'ai téléchargé votre projet.
L'erreur que vous obtenez est
Elle est causée par le
Second
- vue-contrôleur dansMainWindow.xib
avoir une classe deUIViewController
au lieu deSecondView
. Modification de la classe correcte résout le problème.En passant, c'est une mauvaise pratique d'avoir des noms comme "chaîne" en Objective-C. Elle invite à une exécution de nommage de collision. Éviter même une fois hors de la pratique des apps. Les conflits de noms peut être très difficile à suivre et vous ne voulez pas perdre de temps.
Une autre raison possible de cette erreur: lors de la copie d' & collage d'éléments à partir d'un contrôleur à un autre, Xcode, en quelque sorte, garde le lien pour le contrôleur d'origine, même après la modification de la & re-lier cet élément dans le nouveau contrôleur.
Une autre raison possible de cette erreur:
Mauvaise Prise.
Vous avez retiré ou renommé une prise de courant nom dans votre
.h
fichier.De le retirer en
.xib
ou.storyboard
fichier de Connexion de l'Inspecteur.Another possible reason for this error: when copying & pasting elements from one controller into another, Xcode somehow keeps that link to the original controller, even after editing & relinking this element into the new controller.
<= qui était pour moiVous pouvez avoir une mauvaise connexion dans votre xib.
J'ai eu cette erreur plusieurs fois. Alors que TechZen la réponse est tout à fait raison dans ce cas, une autre cause fréquente est quand vous modifier le nom d'un IBOutlet propriété dans votre .h/.m qui vous avez déjà connecté à Propriétaire du Fichier dans la plume.
De votre plume:
Sous "Référencement des points de vente' assurez-vous que votre objet n'est pas encore raccordé à l'ancien nom de la propriété... si elle l'est, cliquez sur le petit " x " pour supprimer la référence et de construire à nouveau.
Une autre cause fréquente si vous utilisez Storyboard, votre UIButton peut avoir plus d'une assignings (la Solution est presque la même que pour la plume):
Vous verrez que il y a plus d'une assigner/ref à ce bouton.
Enlever un de la "main..." grisé windows avec le petit "x":
J'ai dû supprimer l'application dans le simulateur/iPhone pour se débarrasser de cette erreur.
J'ai eu ce message d'erreur quand j'essayais de mettre en œuvre une coutume ViewCell pour une table. Lorsque je l'ai souligné-Vue-contrôleur pour la XIB et connecté aux éléments de la CellView l'origine de l'erreur "ce cours n'est pas la valeur de la clé de codage conforme à la clé" une fois que j'ai supprimé ces il s'est débarrassé de l'erreur.
Supprimer les connexions dans l'image ci-dessous.
Assurez-vous que vous avez seulement les connexions avec la Vue du Tableau de Cellules. Pour vérifier, cliquez sur la vue de la table de la cellule et dans l'INSPECTEUR de look pour vos connexions.
Parfois cela a à voir avec votre "Hériter De la Cible" Cette valeur doit être définie. Avec un seul objectif des applications, vous pouvez simplement sélectionner Hériter De la Cible. Si vous avez plus d'une cible, sélectionnez la cible souhaitée.
Si c'est un iPhone seule application, et non pas universelle, assurez-vous que le champ n'est vide:
Cibles > Résumé > iPhone/iPod Déploiement Info > Interface Principale
Si vous spécifiez un xib là, il se bloque.
Cette erreur indique qu'une déjà raccordé à l'Interface Builder objet est supprimé ou renommé dans sa propriétaire de la source (Propriétaire du Fichier).
De contrôle-cliquez sur le Fichiers du Propriétaire dans Interface Builder si vous voyez un point d'exclamation vous avez besoin pour résoudre ce problème.
Dans l'image ci-dessous, vous pouvez voir que "aRemovedView" a un point d'exclamation sur sa droite, c'est parce que j'ai enlevé le IBOutlet objet de vue alors qu'il était déjà connecté dans l'IB.
Cela donne l'erreur suivante:
Résiliation d'application en raison de uncaught exception 'NSUnknownKeyException', la raison: '[ setValue:forUndefinedKey:]: cette classe n'est pas la valeur de la clé de codage conforme à la clé aRemovedView.'
J'ai eu le même problème et tout TechZen la réponse peut en effet être étonnant, je l'ai trouvé difficile de les appliquer à ma situation.
Finalement, j'ai résolu le problème en reliant le label via le Contrôleur répertoriés sous Objets (en surbrillance dans l'image ci-dessous) plutôt que via le Propriétaire du Fichier.
Espère que cette aide.
dans mon cas, c'était une erreur dans la table de montage séquentiel code source, procédez comme suit:
<connections>
Par exemple:
Comme vous le voyez, ce sont les connexions entre votre code les variables nom et le storyboard de la mise en page des balises xml 😉
Mon correctif a été similaire à Gérard Grundy est. Dans la création d'une coutume UITableViewCell à l'aide d'un XIB, j'ai eu tort d'appliquer la Coutume nom de la Classe pour le Propriétaire du Fichier, au lieu de la UITableViewCell. L'application de la classe à la UITableViewCell sur la toile et la connexion de mon IBOutlet propriétés résolu le problème.
IBOutlet
une fois, leIBOutlet
étiquette de votre ivar est inutile.UIViewController
? À un certain point, vous devriez appeler[SecondView initWithNibName:@"yourNibName" bundle:nil];
-initWithNibName
avec le mauvais nom de plume.Ce qui se passait à moi que lorsque le débogage sur un appareil (iPhone). Le Simulateur iOS a été de travailler sur OK. Faire un "Produit->Propre" à partir de Xcode a semblé résoudre le problème, mais je n'ai aucune idée pourquoi.
Il peut venir du fait que vous avez le contrôle traîné et a créé une prise de courant ou d'action, et j'ai oublié de le supprimer. Même si vous avez supprimé le code, ou même si vous avez fait assez d'cmd+Z, vous aurez besoin d'aller dans le lien de l'inspecteur de votre scénario et de voir si l'action ou à la sortie que vous avez créé est toujours là ou pas.
J'ai eu exactement le même message d'erreur et merci (!!) à Kira de http://www.idev101.com j'ai été en mesure de résoudre le défi. Je n'ai découvert son site après une recherche sur google et empiler plus de tous ces fils. Je suis en train de poster ici le prochain qui vient à StackOverFlow et a le même défi que j'ai eu depuis que personne viendra très probablement à ce fil sur Google.
Je me suis rendu compte que j'ai mal faites ceci:
Au lieu de CELA:
Où
Était le nom de ma Classe aussi connu comme
Vous aurez à
de la mise en œuvre (.m Fichier où vous voulez l'appeler, par exemple un autre UIViewController.
Je suis absolument pas désolé si je ne suis qu'énoncer une évidence pour les débutants comme moi et peut descendre voix que ce n'est pas exactement liée à la question mais j'étais à la recherche de 4 (?!?) heures d'affilée maintenant la réponse à ces message d'erreur. Si je peux épargner ce pour 1 ou 2 personnes, ce serait sympa 🙂
PS: Pour ceux qui s'intéressent à la façon dont le code continue pour le chargement de l'autre UIViewController:
À la recherche sur les autres réponses, il semble que il ya beaucoup de choses qui peuvent provoquer cette erreur. Voici une de plus.
Si vous
Ensuite, vous pouvez obtenir un message d'erreur semblable à
La solution est de supprimer l'ancienne propriété.
Ouvrir l'Identité de l'inspecteur pour votre classe, sélectionnez le nom de la propriété en vertu de l'Utilisateur Défini Exécution des Attributs, et appuyez sur le bouton moins (-).
Ce qui se passe pour moi au moment de mon point de vue, contrôleur avait à l'origine une .xib fichier, mais maintenant il est créé par programmation.
Même si j'ai supprimé le .xib fichier à partir de ce projet. Les utilisateurs d'iPhone/iPad peut contenir une .xib fichiers de ce viewcontroller.
D'essayer de charger une .xib fichier généralement les causes de ce crash:
Solution lors de la création par programmation peut être ceci:
"Module" de la propriété de-Vue-Contrôleur dans l'Identité de l'Inspecteur peut être différent de ce que vous attendiez. Assurez-vous également que les nouvelles classes sont ajoutées à votre liste cible.
J'ai eu un problème similaire pour un projet qui a deux objectifs (avec leur propre MainWindow XIB). La question fondamentale qui a provoqué cette erreur a été pour moi que la classe UIViewController n'était pas inclus dans le deuxième projet de la liste des ressources. I. e. interface builder m'a permis de le spécifier dans la MainWindow.xib, mais au moment de l'exécution, le système ne pouvait pas localiser la classe.
I. e. cmd-clic sur le UIViewController de la classe en question et vérifiez qu'il est inclus dans les "Cibles" de l'onglet.
Juste pour ajouter à cela, parce que je recevais cette erreur ainsi. Passer par toutes ces réponses, la plupart semblent s'appliquer à travailler avec l'INTERFACE utilisateur et de storyboard choses. Je sais que le posteur d'origine ne semble pas fonctionner avec l'INTERFACE utilisateur, mais lors de la recherche pour des raisons possibles pour cette erreur surtout à toutes les questions conduisent à cette question avec ceux d'autres étant fermés comme des doublons ou tout simplement d'avoir des problèmes avec la connexion des choses dans un storyboard, donc je vais ajouter ma solution.
Je travaillais sur le codage d'un service web dans Swift 2. J'avais construit les objets proxy et les talons. Comme je l'ai bouclé le XML retourné, j'ai été dynamiquement l'instanciation de mes objets, qui venaient tous de
NSObject
et à l'aide desetValue:forKey
sur eux. Chaque foissetValue:forKey
essayé de définir une propriété où il a explosé avec cette erreur.J'ai eu une instruction switch pour chaque type, j'ai été confronté (par exemple
Bool?
,CShort?
,String?
) et pour chaque nœud XML, je suis allé à travers et vérifié que le type était sur l'objet, puis convertie en la valeur de ce type et a tenté de la définir avecsetValue:forKey
.Finalement, j'ai commencé à commenter tous ces
setValue:forKey
lignes et constaté que mondefault
instruction switch cas fait un travail pourString?
.J'ai finalement compris que vous ne peut pas usage facultatif swift types avec
setValue:forKey
sauf s'ils ont une correspondance directe à un Objectif de type C commeString?
ouNSNumber?
. J'ai fini par changer tous lesCShort?
types deNSNumber?
depuis qui a une correspondance directe. PourBool?
dans mon cas, c'était bien pour moi de l'utiliser justeBool
et l'initialiser àfalse
. Les autres n'ont pas ce luxe.De toute façon ce qu'est un mal de tête qui était, alors j'espère que cela aide quelqu'un d'autre qui a un problème similaire et ne cesse de s'redirigé sur cette question et de dire à eux-mêmes, "je ne le fais pas pour rien dans l'INTERFACE utilisateur!!".
Donc enfin à rappeler une fois de plus la Valeur-Clé de Codage ne fonctionne pas avec les options. Ci-dessous j'ai fini par trouver quelque part mais je ne sais plus où donc, pour celui qui a posté ce je m'en excuse et donnerait du crédit si je me souvenais où j'ai trouvé cela, mais il m'a sauvé la vie:
Cela pourrait être le cas de la référence à un composant de Xib Interface que vous avez renommé ou supprimer. Re-référencement fonctionne pour moi.
J'ai juste eu ce problème dans mes dupliqué projet et résolu en vérifiant 2 places:
1 - assurez-vous que vous avez la .m de fichier dans la liste -> Projet - Phases de construction; - Compiler les Sources
2 - Après cela, allez à interface builder (c'est probablement une erreur se fait uniquement avec de l'IB) et de rompre tous les liens des propriétés, des étiquettes, des images, etc... Puis re-lier tous. J'ai réalisé que j'ai supprimé un attribut, mais il était encore lié au bureau de l'IB.
Espère que cela fonctionne pour certains.
"ce cours n'est pas la valeur de la clé de codage conforme à la clé"
Je sais que je suis un peu en retard, mais ma réponse est différente, donc je pense qu'il doit être posté, je poussais la deuxième contrôleur dans le mauvais sens, Voici un exemple de
Mauvaise Façon de Pousser Contrôleur
Façon correcte
Je n'ai pas trouvé de réponse, comme ci-dessus peuvent être, il peut aider quelqu'un ayant le même problème
Un autre "non conforme" de l'émission que j'ai trouvé était quand j'ai réussi à avoir deux copies d'une classe pour une raison quelconque.
J'ai été l'ajout des clés de la mauvaise copie. Interface Builder encore vu les touches et permettez-moi de crochet jusqu'à eux, mais à l'exécution, il a été à l'aide de la copie de la classe qui n'ont pas les nouvelles clés.
À trouver qui était le "droit" de l'exemplaire que j'ai utilisé XCode du cmd-clic sur le nom de la classe d'ailleurs de sauter à la copie correcte, alors j'ai tué le mauvais les copies inutilisées (après les avoir sur mes modifications de l'onu, la copie utilisée en premier).
Morale de l'histoire: dupliquer les fichiers de classe sont mauvais.
Cette erreur, c'est autre chose!
Voici comment je l'ai Corrigé. Je suis en utilisant xcode Version 6.1.1 et l'utilisation de swift. J'ai eu cette erreur à chaque fois que mon application a tenté d'effectuer une transition pour passer à l'écran suivant. Voici ce que j'ai fait.
Acclamations,
J'ai eu le même symptôme. La cause était que la "Cible d'Adhésion" de mon fichier source n'a pas été réglé à la bonne cible. Je suppose que cela signifie que ma classe n'aurais pas construit et inclus dans mon application.
À corriger:
Espère que cela aide quelqu'un là-bas.
Si vous avez une coutume sous-classe UIViewController avec IBOutlets qui sont à l'origine des problèmes le seul ensemble de mesures que j'ai trouvé en fait de se débarrasser de l'erreur ont été
.1 Modifier la classe UIViewController
.2 Débranchez tous les points de vente (ils ont tous le triangle d'avertissement jaune maintenant) - il peut être suffisant de simplement débrancher la problématique de la prise(s).
.3 Faire toutes les étapes - ↑⌘K, supprimer des Données Dérivées (, tapis de prière, les soucis de perles)
.4 le Lancement de l'application - accédez à la problématique de la scène.
.5 Tuer l'application, revenez à l'Interface du Générateur de changer la classe de votre classe personnalisée nom.
.6 Reconnecter vos points de vente.
Le lancement de l'application & il aura normalement supprimé la clé-valeur, les questions de conformité.
Dans mon cas. Je n'ai pas de manque de points de vente dans xib-fichiers après la fusion.
résolu mon problème. J'ai nettoyé mon projet et reconstruit.
Dans mon cas, cela a été causé par la référence à la mauvaise Plume:
J'ai été faire cette erreur avec les storyboards. La solution ci-dessus ne semble pas être le problème, donc j'ai fini par supprimer la vue du contrôleur et de l'ajouter à nouveau à nouveau (et bien sûr de reconnecter la séquence et la réaffectation de la classe) qui fixe elle. Je ne sais pas ce que c'était vraiment, mais j'ai renommé la vue associée contrôleur de classe peu de temps avant il a commencé, alors peut-être qui avait arrosé quelque chose.
J'ai eu le même problème. J'ai fait la réinitialisation du simulateur. Le retrait et l'ajout de bouton de contrôle. et enfin un chiffon propre. 🙂 Grâce à un débordement de pile. Certains comment mon code est devenu ok et de commencer le travail.
J'ai eu le même genre de problème. J'ai créé un tableviewCell dans un fichier XIB et a été d'obtenir ce genre d'erreur. Mon problème est que j'ai défini le "Propriétaire du Fichier" classe de ma cellule-vue-contrôleur. Je viens de l'a et de l'ensemble de la cellule de la classe (sur le fichier xib cliquez sur la bordure de la cellule, aller à la troisième onglet sur la droite de l'écran et où il est dit de classe choisi votre vue-contrôleur).
Également essayer de nettoyer votre code.
Vous pouvez avoir des points de vente à l'Élément de l'INTERFACE utilisateur, mais pas IBOutlet propriété dans .h Fichier
Pour tout élément de l'INTERFACE utilisateur dans le cadre de l'Attribut vérifier les points de vente et propriété correspondante dans .h fichier d'en-tête.
Peut être manque un ou plusieurs biens d'entrée dans .h fichier.
Vérifier si vous avez errants de Référencement des points de vente en sélectionnant l'objet concerné dans la table de montage séquentiel/xib de l'interface et de l'ouverture de l'Connexions Inspecteur (Affichage->Utilitaires->Afficher les Connexions de l'Inspecteur). Si vous ne retirez les connexions indésirables et vous devriez être bon d'aller.
J'ai supprimé la propriété à partir du fichier d'en-tête. Je ne pouvais pas trouver aucune référence à elle, mais l'erreur de débogage était encore référence. J'ai trouvé que le fichier nib avait encore une référence. J'ai supprimé le bloc référencé elle et tout ce qui a été fixé.
Dans Le Navigateur De Projets,
Trouver la Plume (xib) fichier. Clic droit et "Afficher la Source". J'ai supprimé les suivantes pleine section
Cela m'arrive aussi quand une INTERFACE utilisateur étiquette ou de tout autre élément de l'INTERFACE utilisateur est référencé par deux variables dans la vue de contrôleur de classe et j'ai supprimer l'un de la variable.
J'ai eu le même problème.Ce qui s'est passé avec mon projet car j'ai changé mon nom de produit mais dans interface builder, j'ai eu l'ancien nom que le Module, ce qui conduit à un crash alors assurez-vous de vérifier tous les xib nom du module a également été modifié ou non.
Vous devrez peut-être supprimer la prise , de le recréer par la forme de dessins IB .H fichier.
Même problème présenté. Ma solution a été de mettre le bon storyboard de la valeur dans les Principaux Storyboard déroulant. J'avais renommé mainstoryboard.storyboard, mais pas de réinitialiser le déploiement d'info.
Une autre cause de cette situation est que vous déclarez cette propriété mis en œuvre comme @dynamique, de la classe mais ne pouvez pas le trouver dans la classe parent.
Dans mon cas,
était la raison.
le remplacer par initWithNibName, résolu.
Cela est déjà arrivé à moi deux fois.
La solution a été de refaire l'ensemble du storyboard depuis que j'ai copié d'un autre (parce que c'était presque la même)
J'ai eu ce problème avec swift classes après la mise à niveau de xcode7. Résolu en utilisant le @objc directive:
@objc(XXXViewController) classe XXXViewController
Le long de avec d'autres questions que vous pouvez voir dans d'autres réponses.
La façon dont j'ai créé cette erreur pour moi a été que j'ai commencé un projet à partir de zéro et de commencer par la suppression de la première scène de mon storyboard puis collé à une scène d'un autre projet dans mon storyboard.
Il n'y a pas de problème à le faire. Vous avez seulement besoin d'ajouter un point d'entrée de votre storyboard c'est à dire vérifier la
is initial View Controller
sur lequel jamais-vue-contrôleur vous le souhaitez. Sinon, il sera un gris de scène et de vous jeter une erreur.J'ai eu ce arrivé quand j'ai eu une UIView lié à un storyboard et connecté IBOutlet comme:
mais plus tard, j'ai fait le UIView dans une classe personnalisée, mais vous avez oublié de changer le nom de la classe de cette IBOutlet défini ci-dessus. ses une étrange erreur, car si la vue personnalisée n'a pas de sous-vues il ne marche pas se plaindre, mais dès qu'il y a des sous-vues il montre l'erreur indiqué dans la question, mais sur l'un des sous-vues et pas de l'extérieur UIView où le problème existe réellement. m'avait supprimant et réinstallant tous les sous-vues d'essayer de trouver le problème, quand, en fait, n'avait rien à voir avec les sous-vues
J'ai eu le même problème lorsque j'ai été en utilisant le storyboard comme le l'écran de lancement de fichier. Je suppose que si vous utilisez une table de montage séquentiel comme l'écran de lancement du fichier, il ne devrait pas être connecté à la vue-contrôleur qu'il n'aura pas encore été chargé.
J'ai rencontré le même problème pour une autre raison: j'ai été en utilisant le storyboard comme le l'écran de lancement de fichier. Je suppose que si vous utilisez une table de montage séquentiel comme l'écran de lancement du fichier, il ne devrait pas être connecté à la vue-contrôleur qu'il n'aura pas encore été chargé.
Cela pourrait signifier que vous essayez d'utiliser une sorte de descripteur sans atsign au début. Comme dans:
[array valueForKeyPath:@"distinctUnionOfObjects.self"]
Qui doit effectivement être:
[array valueForKeyPath:@"@distinctUnionOfObjects.self"]
J'ai eu le même problème, et la cause était due à la spécification d'un Module d'Interface Builder (plutôt que de laisser le champ vide). Donc, quand j'ai été en utilisant un autre module que celui que j'ai défini, l'application crash :S ... espérons que cela aide quelqu'un d'autre, car mon problème n'était pas dû à un bris ou out-of-date de sortie!
J'ai eu ce problème avec le storyboard et rapide de la classe de l'interface utilisateur-vue-contrôleur. Résolu en utilisant le @objc directive:
Mon problème a commencé après que j'ai changé le nom de la Cible.
Mes propres classes de l'INTERFACE utilisateur a le Module de définition du nom de l'ancien nom de la cible.
J'ai changé le nom de la cible à l'autre et il fonctionne très bien maintenant.
Dans mon cas, c'était qu'un IBOutlet du nom de la propriété dans un ViewController.m a été modifié, mais l'un dans le Storyboard ne l'était pas. La réintroduction de la IBOutlet dans le ViewController.m par ctrl-faites glisser résolu le problème. J'ai aussi remarqué un moyen de trouver de telles "orphane" IBOutlets dans XCode: (regardez l'image) ceux qui ne sont pas des "orphelins" ont des cercles concentriques à la place des numéros de ligne.
J'ai résolu ce problème en faisant 2 choses:
Généralement, lorsque cela m'arrive, @TechZen de répondre, en fait le tour. Hier, cependant, j'ai passé un trop long temps de marinage avec storyboard connexions seulement pour découvrir que le problème était dans mon code.
J'ai un affichage personnalisé contrôleur qui gère les différentes mises en mon storyboard, mais l'une des dispositions besoin d'une étiquette spéciale n'est pas utilisé par les autres. J'ai donc créé une sous-classe de la sorte:
Puis j'ai ajouté une propriété privée dans MyViewControllerSubclass.m:
Xcode heureusement permis de me connecter ce IBOutlet, mais à chaque fois le point de vue de la charge, l'application crash avec la vieille "pas de clé-valeur compatible avec la touche 'chrashesApp'".
La solution, qui est semi-évident, rétrospectivement, a été de changer le privé catégorie d'utiliser le nom correct, c'est à dire, que de la sous-classe:
Ce problème se produit également si vous souhaitez concevoir un petit sous-vue dans un autre fichier XIB dans Interface Builder, et au bureau de l'IB vous le réglez à la même classe que la vue parent.
Ensuite, si vous le montrer comme ceci:
La vue s'affiche, mais si il a
IBOutlets
connecté à sa Propriétaire du Fichier, vous obtiendrez le message d'erreur. Donc, cela devrait fonctionner à la place:IBOutlet UIView *mySubview
de référence de la vue dans la sous-vue de la plume de fichiermySubview
et vous serez amende!
J'ai trouvé une autre possibilité qui peut causer le problème.
Lors de l'utilisation de "initWithNibName" la méthode avec le mauvais xib nom, il va conduire à ce genre de crash trop.
Comme vous choisissez de modifier une xib nom du fichier, puis foget pour changer le nom utilisé dans "initWithNibName" la méthode le même nom.
Je me souviens avoir eu un problème similaire dans le passé, je l'ai résolu en changeant la ligne:
dans:
Avis que j'ai été d'abord déclarer UIViewController à init de mon _vicMain, après à l'aide d'une fenêtre pop-up sur le dessus, j'ai réalisé que les deux utilisent le même UIViewController.
Par:
1) y Compris votre classe (de la sous-vue), avec le même module qui est en train de faire le ci-dessus _vicMain (qui est un point de vue contrôleur de l'objet/variable) c'est à dire c'est "vicLogin_iPad.h" dans mon cas , et:
2) Utiliser le votre constructeur personnalisé pour déclarer l'objet (c'est à dire au lieu de "
xxx = [UIViewController alloc] ...
", vous utilisez "xxx = [vicLogin_iPad alloc] ...
" à la place.le problème est résolu.
J'espère que c'était une douleur à identifier avec le manque de détails dans le message d'erreur...
Ce qui concerne
Heider Sati
Je rencontre le même journal des erreurs lorsque vous traitez avec mon tableview cellule. J'ai trouvé que ma UILabels ont dupliqué référencement des points de vente(vous pouvez vérifier dans la référence de l'inspecteur) à la fois le propriétaire du fichier et de la cellule de ma classe. Les choses deviennent bien quand je l'ai supprimer la référence au propriétaire du fichier.
J'ai eu le même message d'erreur dans encore une autre forme légèrement différente:
Dans interface builder, j'ai une manette de navigation avec une coutume subcontroller. Le nom de la classe de ce qui fut fait correctement, mais le nom de PLUME (sélectionnez subcontroller, aller à des Attributs de l'Inspecteur) a été mis sur le mauvais fichier (essentiellement à une cible différente). La réinitialisation de ce le bon nom de fichier a résolu le problème.
J'ai eu ce problème aussi. J'avais copié une vue avec un IBOutlet d'un xib fichier vers un autre fichier xib. Et même si j'avais enlevé l'ancienne référence et de créer une nouvelle référence, cette erreur était toujours en cours.
J'ai fini par redémarrer xcode pour résoudre ce problème.
Parfois swift fichier ne sont pas ajoutées ou retirées de la cible, allez à la cible-->paramètre de construction --> compiler les Sources --> voir si tout swift fichier de classe est manquant ou n'est pas .
Dans mon cas, l'Application a été s'écraser en raison de swift fichier source n'est pas présent dans la compilation.
Un autre cas délicat:
De l'IB ajouté ViewController de storyboard, supprimé son point de vue et de définir des Classe "MyViewController" si la vue est instancié à partir d'MyViewController.xib
Précisant Storyboard ID le même "MyViewController" causes exception.
Changement de Storyboard ID de quelque autre nom résout le problème.
Avez-vous quitté votre sélecteur d'objet non connectés?
lol 54 réponses et pas un seul d'entre eux est ma solution. Parler d'une erreur courante.
Dans mon cas, c'était parce que j'avais un sélecteur d'objet sur mon CR et n'a pas fixé une prise de courant et de l'action pour elle.
J'ai souvent laisser les boutons etc sans lien quand je suis juste à la recherche pour voir l'apparence de la disposition. Mais il semble que vous ne pouvez pas le faire pour un sélecteur.
Juste à payer attention si vous êtes en train d'observer une valeur qui n'existe pas.
Ce qui m'est arrivé tout simplement que j'étais en observant le "Texte" de la propriété d'un champ de texte quand j'étais censé être l'observation de la propriété "text" à la place.
La cause de mon problème, est que j'ai dupliqué un storyboard fichier (en dehors de Xcode si je me souviens bien), puis sur tous les contrôleurs de vue dans le fichier dupliqué avait même objet-ID dans le fichier d'origine. La solution est de copier-collé de la vue des contrôleurs, et ils seront alors obtenir un nouvel objet-ID. Vous pouvez voir l'objet-ID dans l'Identité de l'Inspecteur.
Assurez-vous d'ajouter la classe personnalisée' (même vide) mise en œuvre dans le
.m
fichier comme:Dans mon cas, j'avais ajouté un ViewController à la table de montage, mais je n'ai pas l'assigner à un Storyboard ID dans le concepteur. Une fois j'ai donné un ID, il a travaillé.
à l'aide de Xamarin/Visual Studio 2015.