Je développe un jeu simple et j'ai des problèmes lorsqu'un UIViewController particulier (appelé SPSwipes.Swift ) est chargé}. Sur l’écran, il y a trois boutons : 5, 10 et 25. Lorsqu’on en sélectionne un, une variable est définie dans cette scène et le joueur passe à la Jeu: GameScene.Swift .
Autant que je sache, les les variables sont reconnues dans le GameScene, mais il y a une erreur 'NSUnknownKeyException' lorsque j'ouvre la vue SPSwipes dans le simulateur. Ceci est fait en guise de transition. Voici le erreur plus en détail:
2014-11-09 15:32:43.718 Swipe Racer[2644:1620056] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Swipe_Racer.SPSwipes 0x7fbf52d461b0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key fiveSwipes.'
*** First throw call stack:
(
0 CoreFoundation 0x000000010c021f35 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010dd1bbb7 objc_exception_throw + 45
2 CoreFoundation 0x000000010c021b79 -[NSException raise] + 9
3 Foundation 0x000000010c4397b3 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 259
4 CoreFoundation 0x000000010bf6be80 -[NSArray makeObjectsPerformSelector:] + 224
5 UIKit 0x000000010cd28c7d -[UINib instantiateWithOwner:options:] + 1506
6 UIKit 0x000000010cb87f98 -[UIViewController _loadViewFromNibNamed:bundle:] + 242
7 UIKit 0x000000010cb88588 -[UIViewController loadView] + 109
8 UIKit 0x000000010cb887f9 -[UIViewController loadViewIfRequired] + 75
9 UIKit 0x000000010cb88c8e -[UIViewController view] + 27
10 UIKit 0x000000010caa7ca9 -[UIWindow addRootViewControllerViewIfPossible] + 58
11 UIKit 0x000000010caa8041 -[UIWindow _setHidden:forced:] + 247
12 UIKit 0x000000010cab472c -[UIWindow makeKeyAndVisible] + 42
13 UIKit 0x000000010ca5f061 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2628
14 UIKit 0x000000010ca61d2c -[UIApplication _runWithMainScene:transitionContext:completion:] + 1350
15 UIKit 0x000000010ca60bf2 -[UIApplication workspaceDidEndTransaction:] + 179
16 FrontBoardServices 0x000000011383b2a3 __31-[FBSSerialQueue performAsync:]_block_invoke + 16
17 CoreFoundation 0x000000010bf5753c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
18 CoreFoundation 0x000000010bf4d285 __CFRunLoopDoBlocks + 341
19 CoreFoundation 0x000000010bf4d045 __CFRunLoopRun + 2389
20 CoreFoundation 0x000000010bf4c486 CFRunLoopRunSpecific + 470
21 UIKit 0x000000010ca60669 -[UIApplication _run] + 413
22 UIKit 0x000000010ca63420 UIApplicationMain + 1282
23 Swipe Racer 0x000000010be380de top_level_code + 78
24 Swipe Racer 0x000000010be3811a main + 42
25 libdyld.dylib 0x000000010e507145 start + 1
26 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
Comme vous pouvez le voir, il y a un problème avec ma première variable _, fiveSwipes (et j'imagine qu'il y aurait des erreurs avec les deux autres). Que signifie 'pas sa classe n'est pas conforme au codage des valeurs de clé pour la clé fiveSwipes'? Comment dois-je m'y prendre pour le réparer?
Mon SPSwipes.Swift fichier:
class SPSwipes: UIViewController {
var no_of_swipes = 0
@IBAction func fiveSwipes(sender: AnyObject) {
no_of_swipes = 5
//and so on
}
Merci d'avance,
Volonté
Le problème était que le bouton était lié à de nombreuses IBActions - dont trois n'existaient pas . J'ai cliqué avec le bouton droit sur le bouton dans le Interface Builder et supprimé les liens anciens et non pertinents , résolvant le problème.
L'exception se produit lors de la tentative de chargement de la vue en fonction de ce que vous avez configuré dans Interface Builder. Il cherche fiveSwipes
et ne le trouve pas. Cela peut arriver si vous avez modifié votre code et oublié de mettre à jour une connexion dans IB.
Avez-vous établi un lien dans IB avec un élément appelé fiveSwipes
qui n'est pas cette fonction? Peut-être une variable appelée fiveSwipes
? Le moyen de résoudre le problème serait de trouver l'élément avec la mauvaise connexion dans IB et de supprimer cette connexion.
C'est une vieille question, les autres réponses ne m'aideront pas à résoudre mon problème, alors j'aimerais laisser cette réponse ici pourrait aider d'autres personnes.
Notre application contient plusieurs "cibles". Il se trouve que ViewController pointe vers une cible spécifique et que cette cible ne fonctionne que sur cette cible. Lors de l'exécution sur une autre cible, l'application se bloque avec cette erreur.
Ainsi, pour ceux qui ont plusieurs "cibles", vérifiez le "module" dans "l'inspecteur d'identité" et assurez-vous que le "Module hérité de la cible" est coché.
Une autre raison possible est que vous initialisez votre contrôleur à l’aide de nibName: bundle: et que vous lui transmettez le mauvais nom - une autre qui n’est pas destinée à ce contrôleur. Le résultat final est identique, vous aurez probablement un tas de @IBOutlets qui ne correspondent pas entre le contrôleur et le nib.