Не имеет перехода с ошибкой идентификатора, возникающей только при вызове PerformSegue для `tableView (_: didSelectRowAt:)`

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

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

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
  • Xкод 10.1
  • Свифт 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, это сработало. (Захват перехода)

// 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)
}

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

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

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

person B.Gates Fanboy    schedule 10.01.2019    source источник
comment
В моем случае это не проблема раскручивания, и я уже пробовал удалять, переименовывать и воссоздавать переход. Это не помогло.   -  person B.Gates Fanboy    schedule 10.01.2019
comment
Я установил идентификатор перехода для TableViewController. (Захват изображения) Не могли бы вы ответить более конкретно?   -  person B.Gates Fanboy    schedule 10.01.2019
comment
Обратите внимание, что здесь мы предпочитаем технический стиль письма. Мы мягко препятствуем приветствию, надежде на помощь, благодарности, предварительной благодарности, благодарственным письмам, приветствиям, добрым пожеланиям, подписям, пожалуйста, не могли бы вы помочь, болтовне и сокращенным txtspk, мольбам, как долго вы застряли, советы по голосованию, мета-комментарии и т. д. Просто объясните свою проблему и покажите, что вы пробовали, чего ожидали и что на самом деле произошло.   -  person double-beep    schedule 28.05.2019


Ответы (1)


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

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