質問: 以下の5で困っています。 1. XcodeでIBを使い、ButtonをStoryboardに配置して 2. 紐付けするときに、actionでなくて、誤ってoutletで紐付けしてしまう 3. ビルド(Cmd+r)すると問題なく実行される 4. Cmd+zで戻ってビルド(Cmd+r) 5. [困りポイント]`Thread1: signal SIGABRT`が出てしまう Xcodeはversion6.4でswiftで作っています。 iOSシミュレーターでReset contents and settings...を実行しても特に変化はないです。 不明な点は、 a.4でCmd+zで前の状態にもどってビルドが通るはずなのに、なぜ通らないのか。 Buttonでoutletで紐付けするのはNGということでしょうか? 今回は誤って紐付けしてしまいましたが、Labelなどと同じようにoutletを使いたい時もあるのかなと。 よろしくお願いします。 ----- コメントから転記 ----- エラーログ > > Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key myButton.' > > > ----- ここまで ----- 9/12 22:48 追記 どうやら、紐付けが残っていたようです↓で言うと MyButton。これをdeleteしたら、無事動きました。cmd*zの回数が足りなかったのですかね。。。 ![画像の説明をここに入力](https://i.stack.imgur.com/ZFNty.png)
回答: ちょうどMAC触ってたので画像を踏まえて回答させていただきます。 > > a.4でCmd+zで前の状態にもどってビルドが通るはずなのに、なぜ通らないのか。 > > > こちらでも試してみたところ、 IBOutletやIBActionの変更を元に戻すには、StoryBoard上でCmd+zすれば元に戻せました。 コードペインをアクティブにしてCmd+zしてもStoryBoardファイルには影響がないようです。 > > Buttonでoutletで紐付けするのはNGということでしょうか? > > > 全くNGではありません。 むしろ必要な手順であって、UI部品とコードを対応させる行為がIBOutletです。 それで解決方法なんですが、推測で書かせていただきます。 XCodeのログに`unrecognized selector sent to instance`と出ていますでしょうか? !画像の説明をここに入力 画像について説明させていただくと、 * UIButtonをIBOutletで`button`として定義しています。 * UIButtonのActionメソッドとして、`aaa`を定義しています。 この状態でアプリを起動し、buttonを押下すると`signal SIGABRT`が発生します。 ログは以下のとおりです。 ``` 2015-09-12 10:49:59.041 16535[1319:25886] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_6535.ViewController onButtonTapped:]: unrecognized selector sent to instance 0x7fee70d65ef0' ``` なぜエラーが発生するかと言いますと、UIButtonには`onButtonTapped:`が定義されているものの、ViewControllerクラスに`onButtonTapped:`が存在しないためです。 ※上記の画像の様に、存在しないIBActionの定義が残っていてはダメ Ctrlキーを押しながら対象のUI部品をクリックし、接続一覧(黒いポップアップ画面)を表示したら、不要な接続が残っていないか確認してみてください。