Xcode8でXcode7で作ったプロジェクトを開いて、XIBから追加したActionがエラーになるときの対処法

  • 2
    いいね
  • 1
    コメント

今まで通りXcodeでXIBとかStoryboard上で、ボタンを右クリックのドラッグ・アンド・ドロップで、コードにActionを追加すると、

[Hoge didTapShowButtonWishSender]: unrecognized selector sent to instance xxxxxx

というエラーになっていて、ドキュメントアウトラインから確認すると、メソット名にWithSenderが付いている。
スクリーンショット 2016-09-23 17.59.47.png

しかしコード上に自動補完で挿入されるメソッドにはWithSenderがついてない。
スクリーンショット 2016-09-23 18.00.05.png

Swift 3.0からメソッドのラベルの挙動が変わった影響で、第一引数にもラベルをつけないといけないらしい。
http://stackoverflow.com/questions/39543103/how-to-create-ibaction-in-xcode-8-for-ios-10

なので、引数にwithSenderのラベルをつけて、もう一度コネクションを付け直したら無事復活。
スクリーンショット 2016-09-23 18.21.25.png

因みに、Xcode8で新規にプロジェクトを作ると、

@IBAction func didHogeHoge(_ sender: AnyObject)

となるので問題ない。

自分がプロジェクトを開いたときのコンバートに失敗したのか、よくわからないが、同じ問題にハマる人がいそうなので参考になれば。