最近、アプリを Swift 2.0 に更新し始めましたが、SO に関する 100 の異なる回答がある問題に遭遇しました。どれも私の問題に関連しているようには見えませんでした。
(これは、アプリケーションを Swift 2.0 に更新する前に機能しました)、しかし、ジェスチャ認識機能をタップするために行われた変更を見つけることができませんでしたか?
これが私が得ている完全なエラーです:
[Stocks.SidePanelViewController proFormulaTapGesture]: 認識されないセレクターがインスタンス 0x14f06ae00 に送信されました
キャッチされない例外 'NSInvalidArgumentException' によるアプリの終了、理由: '-[Stocks.SidePanelViewController proFormulaTapGesture]: 認識されないセレクターがインスタンス 0x14f06ae00 に送信されました'
*** First throw call stack: (0x1830904d0 0x197afff9c 0x1830971ec 0x183094188 0x182f9920c 0x188c3c58c 0x188899b50 0x18872d104 0x188c3bc30 0x1886ed28c 0x1886eb3ac 0x18872b088 0x18872a5ec 0x1886fb908 0x1886f9fac 0x183047d6c 0x183047800 0x183045500 0x182f75280 0x18e0ec0cc 0x188762df8 0x100158184 0x1983428b8) libc++abi.dylib: terminating with uncaught exception of type NSException
シンプルなタップジェスチャです。しかし、もうセレクターを認識していないようです。
認識エンジンを設定するために使用するコードは次のとおりです。
let proFormulaTap = UITapGestureRecognizer()
proFormulaTap.addTarget(self, action:"proFormulaTapGesture")
proFormulaView.addGestureRecognizer(proFormulaTap)
実行しようとしている関数は次のとおりです。
func proFormulaTapGesture() throws {
print("proFormulaTapGesture")
selectView(proFormulaView)
selectedMenuItem = 0
Formula = 1
menuTabBarController.selectedIndex = 0
navigationController?.navigationBar.topItem!.title = "BASIC FORMULA"
try (menuTabBarController.viewControllers as! [SuggestionsViewController])[0].loadSuggestions()
}
ただし、コンソールに「proFormulaTapGesture」が出力されることはありません。私は間違いなく関数の前にエラーが発生すると思います。セレクターに言及しているエラーによっても示唆されています。
明らかに、Swift 2.0 への更新以降、関数に try/catch が追加されていますが、tapGestureRecognizer の設定は何も変更されていません。
「スロー」を削除して関数から試してみましたが、問題は解決しません。また、タップ ジェスチャ レコグナイザーの代わりにボタンを作成してみました。しかし、それでも同じエラーが発生します。これは、タップ ジェスチャ/ボタンではなく、セレクタ (関数) に問題がある可能性があることを示唆しています。しかし、アプリの他のボタンはすべて正常に動作しますか?
また、セレクター/機能とタップジェスチャ認識エンジンの名前を変更しようとしました。まだ同じ。
元のコードは、Obj-C ではなく Swift でプログラムされていました。throws と try は、Apple の Swift 2.0 へのコード変換中に追加されました。
これが突然壊れた理由についての助けをいただければ幸いです。
ありがとう!