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
我在测试我的应用程序时遇到崩溃。下图是我的故事板:
我在视图控制器中有代码:
@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