web-dev-qa-db-fra.com

cette classe n'est pas compatible avec le codage des valeurs de clé pour la vue des clés

je suis très nouveau dans xcode ... une application faite (calculatrice simple) fonctionne plutôt bien (sur simulateur et appareil). Lorsque je règle l'interface principale dans les résumé options de Target, j'obtiens l'erreur suivante lors du démarrage du simulateur:

2012-04-14 12: 17: 27.123 CalcTest [27550: f803] * Application terminée en raison d'une exception non capturée 'NSUnknownKeyException',

raison: '[<UIApplication 0x6a14650> setValue:forUndefinedKey:]: cette classe n’est pas compatible avec le codage de valeur de clé pour l’écran de calcul clé. '

* pile du premier appel de lancer: (0x12db022 0x18f8cd6 0x12daee1 0xcc2022 0xc33f6b 0xc33edb 0xc4ed50 0x53671a 0x12dcdea 0x12467f1 0x53526e 0x536eb7 0x313ce1 0x313ff8 0x31317f 0x322183 0x316634 0x322c38 0x27fcef5 0x12af195 0x1213ff2 0x12128da 0x1211d84 0x1211c9b 0x312c65 0x314626 0x1bad 0x1b15 0x1) mettre fin à appelé lancer une exception (lldb)

pour trouver le problème, j'ai démarré un nouveau projet basé sur une vue.

Lancer le nouveau projet vide sur le simulateur -> fonctionne,

Mais lorsque je règle l'interface principale, ViewController, dans le résumé -> le crash du simulateur avec

12/04/2012 12: 11: 17.492 crash [27494: f803] * Application terminée en raison d'une exception non capturée 'NSUnknownKeyException', raison:

'[<UIApplication 0x6a6f4b0> setValue:forUndefinedKey:]: cette classe n'est pas compatible avec le codage des valeurs de clé pour la vue des clés. ' * Premier jet de pile d'appels:

(0x13c7022 0x1558cd6 0x13c6ee1 0x9bf022 0x930f6b 0x930edb 0x94bd50 0x23371a 0x13c8dea 0x13327f1 0x23226e 0x233eb7 0x10ce1 0x10ff8 0x1017f 0x1f183 0x1fc38 0x13634 0x12b1ef5 0x139b195 0x12ffff2 0x12fe8da 0x12fdd84 0x12fdc9b 0xfc65 0x11626 0x1d4d 0x1cb5) mettre fin à lancer une exception appelée

y a-t-il une solution au problème?

50
hugoboss

Si votre contrôle nib (fichier xib) est lié à une propriété (IBOutlet) ou à une méthode (IBAction) dans votre contrôleur de vue et que vous avez supprimé ou renommé la propriété ou la méthode, le moteur d'exécution ne peut pas le trouver. car il a été renommé et se bloque par conséquent.

Dans votre cas, vous avez défini la propriété Interface principale du projet sur votre ViewController.nib. C'est un problème car UIWindows doit être utilisé dans les seules nibs qui doivent être utilisées comme interface principale et le propriétaire du fichier dans cette nib doit être défini sur AppDelegate. La fenêtre UI dans la nib doit être liée à la propriété de fenêtre du propriétaire du fichier (AppDelegate). Parce que vous définissez cela avec une plume sans les caractéristiques recherchées par le moteur d'exécution, cette erreur est générée.

La solution consiste à laisser l’interface principale vierge, car vous n’êtes plus obligé de configurer UIWindows manuellement.

91
Joseph DeCarlo

Je viens d'avoir le même problème et je l'ai corrigé par des contrôles Ctrl-Clic droits dans le fichier xib pour voir le référencement des prises. Il s'est avéré que certains des contrôles faisaient toujours référence à un nom plus ancien et étaient à l'origine de cette erreur.

12
pbeaumier

si vous recevez un message similaire à:

  • Arrêt de l'application en raison d'une exception non interceptée 'NSUnknownKeyException', raison:

'[setValue: forUndefinedKey:]: cette classe n'est pas compatible avec le codage des valeurs de clé pour la clé

cliquez sur le signe (+) dans le coin inférieur gauche de la zone de navigation de BreakPoint, choisissez "Ajouter un point d'arrêt d'exception", car il se bloque en raison de "NSUnknownKeyException", puis choisissez "Tout". Exécutez le programme. Le programme s'arrête à la première exception.

6

essayez ceci, sélectionnez le propriétaire du fichier puis cliquez sur "Inspecteur de connexion" (en haut en haut du volet de droite), vous verrez toutes les prises. Cherchez n'importe quel signe comme celui-ci (!) Vous le trouverez sur le petit cercle qui indique un prise manquante, tout ce que vous avez à faire est de le relier correctement ou de supprimer la prise.

5
Diaa Den

Essaye ça,

Aller à la cible => Construire les phases => Compiler les sources

Ensuite, incluez 'calculatorScreen.m'

4
Vinay

Je faisais face au même problème. Dans mon cas, j'avais renommé l'étiquette de texte en fichier .h. Il y avait donc plusieurs références pour cette étiquette dans mon fichier main.storyboard. Une fois que j'ai supprimé l'ancienne référence, mon code a commencé à fonctionner.

2
Yo Solanki

Veuillez vérifier votre groupe cible. Choisissez la première option. Cela pourrait aider d’autres personnes.

1
Krutarth Patel