我整天都在努力修复“没有标识符的segue”错误并被卡住了。
错误信息:
SegueTest[41862:1585831] *** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Receiver (<SegueTest.TableViewController: 0x7feed6510260>) has no segue with identifier 'tableToCollectionSegue''
*** First throw call stack:
相关文件出现错误:
请Main.storyboard
在 GitHub 上查看我的。
捕获 ViewController 的 segue 配置(工作)
捕获 TableViewController 的 segue 配置(❌ 出现错误)
环境:
- macOS 莫哈韦 10.14.2
- Xcode 10.1
- 斯威夫特 4.2
我在 Main.storyboard 中做了什么:
创建
UINavigationController
为初始视图控制器并RootViewController
作为根视图控制器连接创建从作为模式视图
UINavigationController
打开的RootViewController
将
Open Modal
按钮与模态连接UINavigationController
并命名navigationSegue
创建
ViewController
,TableViewController
和CollectionViewController
将 modal 连接
UINavigationController
为ViewController
根视图控制器将
ViewController
与TableViewController
作为触发的 segue(手动)连接,命名为viewToTableSegue
将
TableViewController
与CollectionViewController
作为触发的 segue(手动)连接,命名为tableToCollectionSegue
连接
Next
Button 上ViewController
的@IBAction func didTapNext(_ sender: Any)
声明ViewController.swift
错误是如何发生的:
当我打电话performSegue(withIdentifier:sender:)
时ViewController.swift
,它起作用了。(转场捕获)
// Go to TableViewController
@IBAction func didTapNext(_ sender: Any) {
// Working
self.performSegue(withIdentifier: "viewToTableSegue", sender: nil)
}
当我打电话performSegue(withIdentifier:sender:)
时TableViewController.swift
,它得到了错误。(转场捕获)
override func tableView(_ tableView: UITableView,
didSelectRowAt indexPath: IndexPath) {
self.tableView.deselectRow(at: indexPath, animated: true)
// ❌ The segue `tableToCollectionSegue` is connected
// from `TableViewController` to `UICollectionViewController`,
// but got error.
//
// *** Terminating app due to uncaught exception 'NSInvalidArgumentException',
// reason: 'Receiver (<SegueTest.TableViewController: 0x7feeea04a090>) has no segue with identifier 'tableToCollectionSegue''
self.performSegue(withIdentifier: "tableToCollectionSegue", sender: nil)
// ❌ The segue `tableToCollectionSegue` is not connected
// from `UINavigationController` to `UICollectionViewController`.
// This error is expected.
//
// *** Terminating app due to uncaught exception 'NSInvalidArgumentException',
// reason: 'Receiver (<SegueTest.TableViewController: 0x7feeea04a090>) has no segue with identifier 'tableToCollectionSegue''
// self.navigationController?.performSegue(withIdentifier: "tableToCollectionSegue", sender: self)
}
我读过的内容:
- performSegueWithIdentifier 没有带标识符的 segue
- Receiver has no segue with identifier 错误消息
- performSegueWithIdentifier 不产生带有标识符错误的 segue
- Segue 错误:ViewController 没有带有标识符的 segue
- 和更多
我试过的:
- 确保正确指定 segue 标识符并实际连接
- 重置所有模拟器设置和内容
- 清理 Xcode 构建文件夹和
~/Library/Developer/Xcode/DerivedData/
目录 - 重命名故事板
- 重启并重建 Xcode 项目
- 重启 Mac