web-dev-qa-db-fra.com

setValue: forUndefinedKey:]:

FinalViewWithSending *newView = [[FinalViewWithSending alloc]initWithNibName:@"FinalViewWithSending" bundle:nil];
newView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:newView animated:YES]; //it crashes here with a thread 1 error, SIGABRT error..

Ça dit:

"Terminating app due to uncaught exception 'NSUnknownKeyException', 
reason: '[<FinalViewWithSending 0x1bef70> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key loginButton.'"

Il n'y a pas de variable appelée loginButton, donc je ne sais pas pourquoi j'obtiens une erreur ...

Je vous remercie

20
Szwedo

Vous obtenez l'erreur car il n'y a pas de propriété appelée loginButton. Vérifiez votre fichier .xib. Il existe presque certainement un mauvais lien vers un objet FinalViewWithSending (probablement le propriétaire du fichier) qui spécifie loginButton même s'il n'existe pas dans le code de la classe.

34
Phillip Mills

Phillip Mills a raison.

La réponse ici, pour quiconque recherche, est de modifier le storyboard et de supprimer tout lien vers la clé non définie spécifiée. Vous devez éditer le fichier de storyboard dans un éditeur externe: faites un clic droit sur la liste du storyboard dans la hiérarchie puis cliquez sur "afficher dans le Finder" ou ce que vous avez. Ouvrez dans un éditeur de texte, supprimez lesdits liens en recherchant, enregistrez et revenez à Xcode. Plus de problème.

Cela se produit lorsque vous supprimez quelque chose du contrôleur de vue de manière incorrecte.

9
timquinn

D'accord ici - Phillip Mills a raison.

Quelqu'un a mentionné l'ouverture du storyboard dans un éditeur de texte - ce n'est pas nécessaire.

Cliquez simplement sur le storyboard, accédez à l'inspecteur des connexions. Si vous avez une prise problématique, vous verrez un marqueur d'exclamation à côté de la prise. Supprime-le.

8
Snowcrash

Comme il s'agit du premier résultat de recherche pour cette erreur, j'ai décidé d'écrire une réponse pour les recrues comme moi.

Vous obtiendrez cette erreur si vous avez des connexions Ctrl glissées à partir de boutons qui génèrent du code dans votre ViewController, puis vous supprimez uniquement le code sans supprimer la connexion.

J'ai eu cette erreur parce que j'avais accidentellement ajouté quelques boutons en tant que prises, lorsque je voulais les ajouter en tant qu'actions. J'ai supprimé le code généré mais les mauvaises connexions étaient toujours là.

Pour les trouver et les supprimer, Affichage-> Utilitaires-> Afficher l'inspecteur des connexions

Cliquez ensuite sur les différents boutons dont vous disposez et cliquez sur le x pour supprimer les mauvaises connexions.

enter image description here

5
Joshua Dance

Si vous avez des localisations, recherchez les mauvais liens dans tous les storyboards (développez le storyboard pour trouver des storyboards localisés).

C'était ma situation. Je cherchais de mauvais liens dans un storyboard et ils étaient dans celui localisé.

2
Yan Arbanov

J'ai eu le même problème:

J'avais précédemment établi une connexion en utilisant des storyboards d'un champ de texte à un fichier d'en-tête. J'ai décidé plus tard que je voulais renommer la connexion de mon objet, malheureusement, je n'ai pas rompu la connexion correctement. Si ce problème était le même que le mien, une connexion existait précédemment avec un bouton et le code dans l'en-tête a été supprimé, mais pas la connexion.

Vérifiez les connexions d'objet dans la vue à laquelle vous vous connectez.

1
kjbradley

Vous pouvez essayer la façon dont je réparais mon setValue:forUndefinedKey:]: problème.

http://i.stack.imgur.com/PDjub.png

1
James Wang

Cette réponse peut être en retard par rapport à l'heure à laquelle la question a été posée, mais je viens d'avoir ce problème et j'ai essayé toutes les solutions publiées ici, mais aucune n'a fonctionné.

Voici ma solution qui pourrait aider n'importe qui à l'avenir.

Tout d'abord le problème,: J'ai utilisé une classe de cellule personnalisée et établi mes connexions, tout a bien fonctionné avec mon application, puis j'ai renommé ma classe de cellule personnalisée, j'ai exécuté mon application mais j'ai planté avec l'erreur setValue: forUndefinedKey:].

Ma solution: cliquez sur le fichier .xib, sélectionnez l'inspecteur d'identité et tapez la nouvelle classe nommée dans Classe personnalisée -> Balise de classe. Erreur d'application résolue.

0
Franklyn

Probablement, vous avez précédemment créé le LoginButton, Cmd + Shift + F et trouvez le "LoginButton" et supprimez la prise de référence et la reconstruction.

0
Vikram Belde

Vous pouvez utiliser des objets associés pour éviter le sous-classement. Quant à setValue: forKey: et setValue: forUndefinedKey:, consultez le fichier d'en-tête (NSKeyValueCoding.h) pour plus de détails.

Selon votre description, recherchez newView dans votre générateur d'interface et faites un clic droit dessus, vous verrez quelque chose comme loginButton qui est anormal.

0
Scott Zhu

Accédez à l'inspecteur de connexion de votre xib du contrôleur de vue FinalViewWithSending et supprimez la référence du bouton de connexion. Après cela, il s'exécutera. Essayez-le ... :)

0
iYoung

Aujourd'hui, je travaillais et j'ai présenté cette même erreur, j'ai utilisé la réponse de Phillip Mills était correcte et j'avais quelques étiquettes dans un ViewController.xib auxquelles aucun lien n'était attribué, j'ai cinq mauvais liens, une fois les liens attribués, tout fonctionne parfaitement , merci réponse de Phillip Mills.

0
juanmorillios