Swift 3中的prepare(for segue:)函数出错了?

23

由于某种奇怪的原因,使用Swift 3时,prepare(for segue:方法不会承认segue标识符。我已经将以下IBAction连接到UI上的几个按钮:

对于一些奇怪的原因,使用Swift 3时,prepare(for segue:方法拒绝承认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: 方法中,它无法识别不同的segue标识符,我知道这是因为我的控制台没有记录我分配给每个标识符的消息:

然而,在我的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")

        } 
}

有什么建议吗?还是这只是一个错误?


替换为以下代码 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { print("测试"); // 使用segue.destinationViewController获取新的视图控制器。 // 将所选对象传递给新的视图控制器。 } - Antony Ouseph
1个回答

57

您的方法根本没有被调用,因为您使用了错误的签名。在Xcode 8 beta 6中已更改为:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
请注意,sender的类型为Any?而不是AnyObject?。在升级Xcode后,你应该会收到一个错误提示,告诉你这个方法没有覆盖其超类中的任何方法,这应该在你删除override之前就已经提示了你。

这似乎是解决方案,但我仔细阅读了文档,从未看到发送对象语法发生更改...所以我无意中删除了覆盖。无论如何,还是谢谢! - John Durand
1
截至今天,我在没有覆盖的情况下收到了一个错误,但是覆盖并没有被调用。 - quantumpotato

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接