web-dev-qa-db-ja.com

Swift:キャッチされなかった例外「NSUnknownKeyException」が原因でアプリが終了しました

単純なゲームを開発していますが、問題が発生しています特定のUIViewController(SPSwipes.Swiftと呼ばれる)がロードされたとき。画面にはつのボタン:5、10、25があります。1つを選択すると、そのシーンに変数が設定されますおよびプレイヤーが移動しますonメインゲームへ:GameScene.Swift

私が知る限り変数はGameSceneで認識されますですが、'NSUnknownKeyException'を開くとエラーが発生します- シミュレータのSPSwipesビュー。これはセグエ経由で行われます。これがerrorの詳細です:

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)

ご覧のとおり、最初の変数の問題fiveSwipesがあります(他の2つの変数にはエラーがあると思います)。 't 彼のクラスはキーfiveSwipesのキー値コーディングに準拠していません'はどういう意味ですか?どうすれば修正できますか?

私のSPSwipes.Swiftファイル:

class SPSwipes: UIViewController {

var no_of_swipes = 0

@IBAction func fiveSwipes(sender: AnyObject) {
    no_of_swipes = 5

//and so on

}

前もって感謝します、

ウィル

14
user4072094

問題は、ボタンが多数のIBActionにリンクされていた-そのうちの3つが存在しなかったということでした。 I 右クリックInterface Builderのボタンと古くて無関係なリンクを削除、問題を修正します。

29
user4072094

私にとっては、存在しないIBOutletsに接続された複数のビューがあったためです。

見つける方法のアイデアを得るには:

1-ビューコントローラ全体をクリックします

enter image description here

2-移動:コネクタインスペクタを表示

enter image description here

そこには、接続されていないすべてのコンセントがあります

3
Suhaib

Interface Builderで設定した内容に基づいてビューを読み込もうとすると、例外が発生します。 fiveSwipesを探していますが、見つかりません。これは、コードを編集してIBの接続を更新するのを忘れた場合に発生する可能性があります。

この関数ではないfiveSwipesと呼ばれるものにIBで接続しましたか?おそらくfiveSwipesという変数ですか?この問題を解決する方法は、IBで接続不良の要素を見つけて、その接続をクリアすることです。

2
DPlusV

これは古い質問です。他の回答は私の問題を解決するのに役立たないので、この回答をここに残したいので、他の人に役立つかもしれません。

私たちのアプリには複数の「ターゲット」が含まれていますが、ViewControllerが特定のターゲットを指していることが発生し、そのターゲットでのみこのViewControllerが機能します。他のターゲットで実行すると、アプリはこのエラーでクラッシュします。

したがって、複数の「ターゲット」がある場合は、必ず「IDインスペクター」の「モジュール」をチェックし、「ターゲットからモジュールを継承」がチェックされていることを確認してください。

screenshot

1
SquareBox

これのもう1つの考えられる理由は、nibName:bundle:を使用してコントローラーを初期化していて、間違ったペン先名(このコントローラー用ではない他のペン先)を渡した場合です。最終結果は同じです。コントローラーとペン先の間で一致しない@IBOutletsがたくさんある可能性があります。

0