web-dev-qa-db-ja.com

swift 3 prepare(segue:)function broken?

何らかの奇妙な理由で、Swift 3、prepare(for segue:メソッドは、セグエ識別子の確認を拒否します。次のIBActionがUIのいくつかのボタンに接続されています。

@IBAction func goToImagesPicker(_ sender: AnyObject) {
    performSegue(withIdentifier: "showImagePicker", sender: sender)

}

@IBAction func goToNamePicker(_ sender: AnyObject) {
    performSegue(withIdentifier: "showNamePicker", sender: sender)
}

しかし、私のprepare(for segue:メソッド、異なるセグエ識別子を認識しません。私が知っているのは、コンソールがそれぞれに割り当てたメッセージを記録しないからです:

func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {

        if segue.identifier == "showImagePicker" {

            print("This is the Image Picker")

        }

        if segue.identifier == "showNamePicker"  {

            print("This is the Name Picker")

        } 
}

助言がありますか?またはこれは単なるバグですか?

23
John Durand

署名が間違っているため、メソッドがまったく呼び出されません。 Xcode 8ベータ6では次のように変更されました。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

senderのタイプはAny? の代わりに AnyObject?。 Xcodeをアップグレードした後、overrideを削除する前にメソッドがスーパークラスのメソッドをオーバーライドしていないことを示すエラーが発生するはずです。

57
dan