5

1、2日前にSwiftの学習を開始しました。私はこのエラーに何度も遭遇します。基本的には、IBOutlets と関係があることを認識しています。ストーリーボード内のすべてのアウトレットとボタン/オブジェクトを削除し、それらを手動で再追加するとうまくいくようです。

将来、このエラーが発生し、大規模なプロジェクトに取り組んでいる場合、どの IBOutlet であるか、またはこれを引き起こしている可能性があるものを診断する方法を知りたいです。

GitHub にプロジェクトのコピーがあります。こちらをご覧になり、アドバイスを残していただければ幸いです。

事前にたくさんありがとう!

2015-06-04 22:24:31.607 Controlling The Keyboard[1343:16382] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Controlling_The_Keyboard.ViewController 0x7f80896418b0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key enterButton.'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000104855c65 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x00000001063c0bb7 objc_exception_throw + 45
    2   CoreFoundation                      0x00000001048558a9 -[NSException raise] + 9
    3   Foundation                          0x0000000104c73b53 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 259
    4   CoreFoundation                      0x000000010479dd50 -[NSArray makeObjectsPerformSelector:] + 224
    5   UIKit                               0x00000001053cc52b -[UINib instantiateWithOwner:options:] + 1506
    6   UIKit                               0x0000000105224718 -[UIViewController _loadViewFromNibNamed:bundle:] + 242
    7   UIKit                               0x0000000105224d08 -[UIViewController loadView] + 109
    8   UIKit                               0x0000000105224f79 -[UIViewController loadViewIfRequired] + 75
    9   UIKit                               0x000000010522540e -[UIViewController view] + 27
    10  UIKit                               0x00000001051402c9 -[UIWindow addRootViewControllerViewIfPossible] + 58
    11  UIKit                               0x000000010514068f -[UIWindow _setHidden:forced:] + 247
    12  UIKit                               0x000000010514ce21 -[UIWindow makeKeyAndVisible] + 42
    13  UIKit                               0x00000001050f0457 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2732
    14  UIKit                               0x00000001050f31de -[UIApplication _runWithMainScene:transitionContext:completion:] + 1349
    15  UIKit                               0x00000001050f20d5 -[UIApplication workspaceDidEndTransaction:] + 179
    16  FrontBoardServices                  0x0000000107ed05e5 __31-[FBSSerialQueue performAsync:]_block_invoke_2 + 21
    17  CoreFoundation                      0x000000010478941c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
    18  CoreFoundation                      0x000000010477f165 __CFRunLoopDoBlocks + 341
    19  CoreFoundation                      0x000000010477ef25 __CFRunLoopRun + 2389
    20  CoreFoundation                      0x000000010477e366 CFRunLoopRunSpecific + 470
    21  UIKit                               0x00000001050f1b42 -[UIApplication _run] + 413
    22  UIKit                               0x00000001050f4900 UIApplicationMain + 1282
    23  Controlling The Keyboard            0x0000000104654f37 main + 135
    24  libdyld.dylib                       0x0000000106b18145 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 
4

4 に答える 4

2

私はそのような問題に直面していました。エラーログを読んで、何が起こっているのかを理解するのが最善の方法だと思います。

あなたのエラーメッセージは言っています

this class is not key value coding-compliant for the key enterButton

したがって、それが という名前の IBOutlet に関連していることがわかりenterButtonます。次に、enterButton とは何か、およびそれに対して何を行ったかを知ることができます。

私が学んだことは、コントロールをドラッグして IBOutlet を作成し、後で名前を変更した場合、xib ファイルまたはストーリーボードのマッピングが壊れることがあるということです。

enterButtonxib ファイルを検索すると、xml ファイルにいくつかのキーが定義されており、正しい UIView 要素が正しく初期化されるようになっていることがわかります。名前を変更すると、マッピングが破損するため、何かが南に進みます。

これは経験であり、iOS に慣れてくると、iOS のデバッグ方法がわかるようになります。しかし、現時点でできることは、ビューとコントローラーが nib からどのように初期化されるか、および LLDB を使用してコードをデバッグする方法を理解することだと思います。これは常に役立ちます。

Swift:タイプ NSException のキャッチされない例外で終了することは、あなたの問題と非常に似ています。見てみな。

于 2015-06-05T03:40:01.240 に答える