我整整一天都在努力修复“没有带标识符的 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:
相关文件出现错误:
请在 GitHub 上查看我的 Main.storyboard
。
Capture of segue configuration for ViewController (👌 Working)
Capture of segue configuration for TableViewController (❌ Getting error)
环境:
- macOS Mojave 10.14.2
- Xcode 10.1
- swift 4.2
我在 Main.storyboard 中做了什么:
创建
UINavigationController
作为初始 View Controller 并连接到RootViewController
作为 Root View Controller创建从
RootViewController
打开的UINavigationController
作为模态视图将
Open Modal
按钮连接到模态UINavigationController
并将其命名为navigationSegue
创建
ViewController
、TableViewController
和CollectionViewController
将模态
UINavigationController
与ViewController
作为 Root View Controller 连接将
的触发转场(手动)ViewController
与TableViewController
连接为名为viewToTableSegue
将
的触发转场(手动)TableViewController
与CollectionViewController
连接为名为tableToCollectionSegue
将
ViewController
上的Next
按钮与中声明的
@IBAction func didTapNext(_ sender: Any)
连接起来>ViewController.swift
错误是如何发生的:
当我在 ViewController.swift
中调用 performSegue(withIdentifier:sender:)
时, 有用。
( Segue capture )
// Go to TableViewController
@IBAction func didTapNext(_ sender: Any) {
// 👌 Working
self.performSegue(withIdentifier: "viewToTableSegue", sender: nil)
}
当我在 TableViewController.swift
中调用 performSegue(withIdentifier:sender:)
时,它得到了错误。
( Segue capture )
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 has no segue with identifier
- Receiver has no segue with identifier error message
- performSegueWithIdentifier produce no segue with identifier error
- Segue Error : ViewController has no segue with identifier
- 还有更多
我尝试过的:
- 确保正确指定并实际连接了 segue 标识符
- 重置所有模拟器设置和内容
- 清理 Xcode 构建文件夹和
~/Library/Developer/Xcode/DerivedData/
目录 - 重命名 Storyboard
- 重新启动并重建 Xcode 项目
- 重启苹果
最佳答案
从 TableViewController
中删除以下行:
required public init?(coder aDecoder: NSCoder) {
super.init(style: .plain)
}
关于swift - 只有在 "Has no segue with identifier"上调用 performSegue 时才会出现 `tableView (_: didSelectRowAt:)` 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54123322/