Ошибка «Нет перехода с идентификатором» возникает только тогда, когда executeSegue вызывается для `tableView (_: didSelectRowAt:)` - PullRequest
0 голосов
/ 10 января 2019

Я целый день пытаюсь исправить ошибку "не имеет идентификатора" и застрял.

Сообщение об ошибке:

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.

Файлы проекта Xcode на Github

Диаграмма перехода

Захват следующей конфигурации для ViewController (? Работает)

Захват следующей конфигурации для TableViewController (❌ Ошибка получения)

Окружающая среда:

  • macOS Мохаве 10.14.2
  • Xcode 10.1
  • Swift 4.2

Что я делал в Main.storyboard:

  1. Создано UINavigationController в качестве начального контроллера представления и подключение к RootViewController в качестве корневого контроллера представления

  2. Создание UINavigationController, которое открывается из RootViewController как модальное представление

  3. Связал кнопку Open Modal с модальной UINavigationController и назвал ее navigationSegue

  4. Создать ViewController, TableViewController и CollectionViewController

  5. Соедините модальное UINavigationController с ViewController в качестве контроллера корневого представления

  6. Соедините ViewController с TableViewController в качестве инициируемого перехода (руководство) с именем viewToTableSegue

  7. Соедините TableViewController с CollectionViewController как инициируемый переход (руководство) с именем tableToCollectionSegue

  8. Соедините кнопку Next на ViewController с @IBAction func didTapNext(_ sender: Any), заявленным в ViewController.swift

Как происходит ошибка:

Когда я звонил performSegue(withIdentifier:sender:) в ViewController.swift, это работает. ( Segue capture )

// Go to TableViewController
@IBAction func didTapNext(_ sender: Any) {
    // ? Working
    self.performSegue(withIdentifier: "viewToTableSegue", sender: nil)
}

Когда я позвонил performSegue(withIdentifier:sender:) в TableViewController.swift, он получил ошибку. ( 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)
}

Что я прочитал:

Что я пробовал:

  • Убедитесь, что идентификаторы segue правильно указаны и действительно подключены
  • Сброс всех настроек и содержимого симулятора
  • Чистые папки сборки Xcode и ~/Library/Developer/Xcode/DerivedData/ каталог
  • Переименовать раскадровку
  • Перезапустите и пересоберите проект Xcode
  • Перезагрузите Mac

1 Ответ

0 голосов
/ 10 января 2019

Удалите следующие строки из TableViewController:

required public init?(coder aDecoder: NSCoder) {
    super.init(style: .plain)
}
...