2

我整天都在努力修复“没有标识符的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 上查看我的。

Github 上的 Xcode 项目文件

赛格图

捕获 ViewController 的 segue 配置(工作)

捕获 TableViewController 的 segue 配置(❌ 出现错误)

环境:

  • macOS 莫哈韦 10.14.2
  • Xcode 10.1
  • 斯威夫特 4.2

我在 Main.storyboard 中做了什么:

  1. 创建UINavigationController为初始视图控制器并RootViewController作为根视图控制器连接

  2. 创建从作为模式视图UINavigationController打开的RootViewController

  3. Open Modal按钮与模态连接UINavigationController并命名navigationSegue

  4. 创建ViewController,TableViewControllerCollectionViewController

  5. 将 modal 连接UINavigationControllerViewController根视图控制器

  6. ViewControllerTableViewController作为触发的 segue(手动)连接,命名为viewToTableSegue

  7. TableViewControllerCollectionViewController作为触发的 segue(手动)连接,命名为tableToCollectionSegue

  8. 连接NextButton 上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)
}

我读过的内容:

我试过的:

  • 确保正确指定 segue 标识符并实际连接
  • 重置所有模拟器设置和内容
  • 清理 Xcode 构建文件夹和~/Library/Developer/Xcode/DerivedData/目录
  • 重命名故事板
  • 重启并重建 Xcode 项目
  • 重启 Mac
4

1 回答 1

0

从 中删除以下行TableViewController

required public init?(coder aDecoder: NSCoder) {
    super.init(style: .plain)
}
于 2019-01-10T09:01:57.680 回答