- 更新日: 2015年5月25日
- Swift & iOS
Outlet削除でのNSUnknownKeyExceptionエラー
iOS/Swift のプロジェクトで、Storyboard を使って作成した Outlet を一旦削除して、もう一度作成し直そうとしたらはまりました。実行時に以下のエラーが発生しまして、最初何が原因か分からずちょっと立ち往生した。
1 2 3 |
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<TodoApp.AboutViewController 0x7f9158ca67f0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key tableView.' |
解決のヒントが以下の記事にありまして助かりました。ありがとうございます。
NSUnknownKeyExceptionが出た時の回避方法 | iPhoneアプリ開発者の憂鬱
ソースコード側の @IBOutlet の行のみを削除すると NSUnknownKeyException 発生
Storyboard を使って UI/View を組み立てる場合の話で…
例えば ViewController に UITableView の Outlet を作成する時は、Main.stroyboard で Table View のオブジェクトを Control キーを押しながら、アシスタントエディタに開いた ViewController にドラッグして Outlet を作成します。
それで、例えば変数名をタイポしたり名前を変更したい時に、もう一度最初からやり直したい場合に、ソースコード側の @IBOutlet の行を削除するだけですと、冒頭の NSUnknownKeyException の実行時エラーが発生します。
1 2 3 4 5 6 7 |
class AboutViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { // ↓ Outlet 削除でこの行を削除するだけだと NSUnknownKeyException 発生 @IBOutlet weak var tableView: UITableView! // ... } |
これやってしまいがちなミスだと思います、特に入門者は。
コネクション・インスペクターの Referencing Outlets も削除するとOK
Main.storyboard で outlet を作成した Table View を選択後、コネクション・インスペクター(Connections inspector)を開きますと、以下画像の通り Referencing Outlets に tableView の outlet が残っています。
最初から outlet を作成し直す場合、既に作成していた outlet である「tableView – アプリについて」の部分の×ボタンを押して、この Referencing Outlets も削除する必要があります。なので、これを削除しました。
そして、ソースコード側の @IBOutlet の行も削除した後、新たに Outlet を作成しなおしたら OK です。これで、NSUnknownKeyException の実行時エラーが出なくなりました。
知らないとはまる…。これも、私のような iOS/Xcode 入門者ははまりやすいポイントかもです。
- Swift & iOS の関連記事
- WKWebView/UIWebViewでウェブページが真っ白
- Unityのインストールと初期設定
- WKWebView/UIWebViewでNavigation Barの下にウェブページが隠れるのを回避
- SwiftでArray(配列)などをシャッフル
- Navigation Controllerで画面遷移させるSwiftコード
- Swiftでタップ/スワイプのイベント処理実装・UITapGestureRecognizerとUISwipeGestureRecognizer
- UIPageViewController画面下部のUIPageControlを非表示にする
- Swiftのバージョン確認・REPL実行
- Xcode7.0アップデートで遭遇した課題2つ
- 正規のXcodeかどうかチェック(XcodeGhostマルウェア騒動)
- 2件のコメント
私もまったく同じ問題にはまりましたが、おかげさまで解決できました。
こういった記録は本当にありがたいです。
うなさくさん、こんにちは!この Outlet のエラーは初めてだとはまりやすいですよね。
お役に立てたようで嬉しく思います。