highlight.xcode

2016年4月23日土曜日

Swift のエラー NSUnknownKeyException



またまた、意味が解らないエラーでハマり、例によってその原因がしょーもなかったのでメモ。
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key labelAccelX.'
***
と怒られた。
そして、まったく意味が解らなかった…。

要するに「labelAccelX っていうキーが見つからないよ」ってエラーなんだけど、
「え、キー?」
「 コレクションの扱いがまずかったのか?」
としか考えられず、数十分間あれこれ悩んだ。

結局コレは Swift というより、ストーリーボードの問題だった…。

ストーリーボード上のオブジェクトを、コード側へ参照させた後に、コード側でオブジェクトの名前(というか、オブジェクト参照している変数の名前)を変えただけで、このエラーが起こってしまう…。そして、そのエラーの内容が抽象的過ぎて、実際の問題に気付けないっていう…。

要は、ストーリーボード側で管理している変数名やメソッド名のコレクションに齟齬が生じている、ってエラーだったんだけど、もっと解りやすいメッセージにして欲しいなぁ…。

まとめ
  1. 自動生成された変数名、メソッド名等は直接変更しない
  2. 変更したい時は、ストーリボード上でコネクションを一旦削除
  3. 再度ストーリボードからコードへコネクションを張り直す際に、新しい名前を付ける
  4. その後、古い変数、メソッドを削除する

0 件のコメント:

コメントを投稿