web-dev-qa-db-fra.com

Comment résoudre une «NSUnknownKeyException» ... setValue: forUndefinedKey:]: ... non conforme au codage des valeurs de clé

D'accord, je vais essayer de faire ce bref que possible. Je voulais une UIToolbar au-dessus de mon clavier, et cela m'a pris du temps pour le comprendre, et je l'ai finalement fait, mais quand j'ai essayé d'ajouter de la fonction aux boutons précédent * suivant * et fait mon programme ne compilerait bientôt plus.

Le message d'erreur complet peut être vu ici:

2012-06-20 05: 36: 55.276 KegCop [79460: fb03] * Arrêt de l'application en raison d'une exception non interceptée 'NSUnknownKeyException', raison: '[setValue: forUndefinedKey:]: this La classe n'est pas conforme au codage des valeurs de clé pour la clé effectuée. '

* pile du premier appel de lancer: (0x134a022 0x1733cd6 0x1349ee1 0xd31022 0xca2f6b 0xca2edb 0xcbdd50 0x5a571a 0x134bdea 0x12b57f1 0x5a426e 0x7adeef 0x7ae03e 0x382d7a 0x382ff8 0x38217f 0x391183 0x385634 0x391c38 0x1f84ef5 0x131e195 0x1282ff2 0x12818da 0x1280d84 0x1280c9b 0x381c65 0x383626 0x2a8d 0x29f5 0x1) terminate appelée levée d'une exception (lldb)

@Abizern m'a suggéré de lire le Apple Doc on Key value coding guide . Quoi qu'il en soit, il est super tard ou très tôt, peu importe ce que vous regardez. Le projet mis à jour peut être trouvé ici: https://github.com/ipatch/KegCop

Téléchargez simplement le Zip, et essayez de construire et vous verrez de quoi je parle. L'erreur se situe probablement quelque part dans le fichier ViewControllerWelcome.m .

32
ipatch

Recherchez dans votre storyboard ou xib (celui que vous utilisez) l'objet ViewControllerWelcome. La source la plus probable de cette erreur est que quelque chose a une connexion à une action ou une sortie appelée done qui n'existe pas dans le code de cette classe.

62
Phillip Mills

La façon la plus simple de vérifier cela est de faire Ctrl + clic sur votre contrôleur dans la vue Storyboard et de rechercher quelque chose dans la fenêtre contextuelle résultante qui a une marque d'avertissement jaune à côté. Supprimez-le simplement en appuyant sur (x) à côté du nom de la prise.

34
kaskader

Si vous utilisez un storyboard, cliquez simplement sur chaque ViewController et sélectionnez leur inspecteur de connexions. Vérifiez s'il y a un signe d'exclamation (pour les connexions perdues).

Supprimez-les correctement, puis réexécutez votre projet.

4
Sauvik Dolui

J'ai rencontré le même problème, j'ai utilisé un xib pour le viewcontroller mais je l'ai supprimé. Cependant, dans le code, la connexion obtient toujours les connexions du xib supprimé. Donc, la façon de se promener est de créer un nouveau xib pour le viewcontroller. Ensuite, le problème a été résolu.

0
user2380132

Dans mon cas, c'était un cache étrange sur xcode, même avec toutes les références supprimées aux IBOutlets, il faisait toujours planter. IBOutlets pointait vers une version plus ancienne de mon fichier, donc même pas la suppression et l'ajout de fichiers en arrière ou la suppression de toutes les sorties de référencement de ma plume fonctionnait ...

SOLUTION:fermeture de xcode a fait l'affaire, aussi nettoyage/nettoyage en profondeur du projet aurait pu aider.

0
user2387149