

以下の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)](https://i.stack.imgur.com/ZFNty.png)


CC BY-SA 3.0
2015-09-12T01:21:35.107
16535
2015-09-14T01:21:13.820
2015-09-14T01:21:13.820
3516
12299
question
ios swift xcode
Xcodeで、Buttonでactionでなくてoutletで紐付けしてしまってビルドでのエラー


ちょうど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`と出ていますでしょうか？

[![画像の説明をここに入力](https://i.stack.imgur.com/S9YJw.png)](https://i.stack.imgur.com/S9YJw.png)

画像について説明させていただくと、  
* UIButtonをIBOutletで`button`として定義しています。  
* UIButtonのActionメソッドとして、`aaa`を定義しています。

この状態でアプリを起動し、buttonを押下すると`signal SIGABRT`が発生します。  
ログは以下のとおりです。

[code]

    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'
    
[/code]

なぜエラーが発生するかと言いますと、UIButtonには`onButtonTapped:`が定義されているものの、ViewControllerクラスに`onButtonTapped:`が存在しないためです。

※上記の画像の様に、存在しないIBActionの定義が残っていてはダメ

Ctrlキーを押しながら対象のUI部品をクリックし、接続一覧（黒いポップアップ画面）を表示したら、不要な接続が残っていないか確認してみてください。


CC BY-SA 3.0
2015-09-12T02:21:47.007
16537
2015-09-12T02:34:01.190
2015-09-12T02:34:01.190
12256
12256
16535
answer