performSegueWithIdentifier 没有带有标识符的 segue

performSegueWithIdentifier has no segue with identifier

我在测试我的应用程序时遇到崩溃。下图是我的故事板:

我在视图控制器中有代码:

@IBAction func unwindToHomeScreen(segue:UIStoryboardSegue) {

}

"Add new Item" 的视图有一个 "Cancel" 按钮,我 controlled-drag 它到顶部的 "Exit" 图标, link 到 unwindToHomeScreen,效果很好。

"Add new Item"有一个classAddTableViewController和我里面写的代码:

@IBAction func save() {
    // Execute the unwind segue and go back to the home screen
    performSegueWithIdentifier("unwindToHomeScreen", sender: self)
}

我 controlled-drag 将 "Save" 按钮添加到功能中,但是当我单击该按钮时应用程序崩溃了

我可以用dismissViewControllerAnimated(true, completion: nil)代替,但我只是想知道为什么performSegueWithIdentifier不行?

我看了dropbox.com/s/hpybgg9x67rtqng/foodpinstatictable.zip?dl=0的代码,试着做了一个,用performSegueWithIdentifier这样的例子练习,我没看到她的segue标识符,有什么区别?

你实际上并没有给那个 segue 一个标识符。 unwindToHomeScreen是一个可以调用的函数;您正在寻找的是您的 segue 标识符,它在 Interface Builder 中设置如下:

在这个例子中,我有一个按钮通过 Interface Builder 连接到下一个视图,就像你描述的那样("Interface Builder"),还有一个按钮连接到我的视图控制器中的这个 IBAction("Programmatically"):

@IBAction func goToNextView(sender: UIButton!) {
    self.performSegueWithIdentifier:("go", sender: self)
}

无论如何,您缺少的是实际标识符,它可以在 Interface Builder 中创建的 segue 的属性中设置。

我发现因为我重命名了我的视图控制器,所以我需要删除并重新创建 segue。

对我来说 --> 单击视图控制器之间的关系箭头,然后单击 select 属性检查器,有标识符给名称和 select 推送 class 完成...

在我的例子中重新排序嵌入在

标签栏控制器 导航控制器 vc(包含按钮 - 点击按钮启动 "show, e.g. push" segue)

太固定导航栏中的标题

iOS12 及更早版本的一个可能问题(iOS13 似乎没有遇到同样的问题)可能是因为 performSegue(withIdentifier:,sender :) 从视图控制器 viewdidLoad() 回调中调用.

您绝对必须从 viewDidAppear(_ animated: Bool) 回调 调用它以避免 question-mentioned崩溃。

这肯定会节省 hair-puling 的时间……

Swift 4:

有时我们必须清理构建文件夹然后重试。

在 ctrl-dragging 新的 segue 之后为我工作并为其命名,然后以编程方式将其用作:

performSegue(withIdentifier: "goToMyNewViewController" , sender: self)

我遇到了同样的问题。

我所做的只是:

我在故事板中选择了 segue 指示器。

已删除。

然后用相同的标识符创建了一个新的 segue。繁荣,它有效。

我已经正确连接好了。只是 viewController 我从中开始,不是从情节提要中实例化的。我实用地实例化了它。

我最初把它写成:

let vc = DeviceVC()

必须将其更改为:

let sb = UIStoryboard(name: "Main", bundle: Bundle(for: DeviceVC.self))
let vc = sb.instantiateViewController(identifier: "DeviceVC") as! DevieVC