Я целый день пытаюсь исправить ошибку «нет перехода с идентификатором» и застрял.
Сообщение об ошибке:
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 (???? Работает)
Захват конфигурации перехода для TableViewController (❌ Получение ошибки)
Окружающая среда:
- macOS Мохаве 10.14.2
- Xкод 10.1
- Свифт 4.2
Что я сделал в Main.storyboard:
Создал
UINavigationController
в качестве начального контроллера представления и подключился кRootViewController
в качестве корневого контроллера представления.Создайте
UINavigationController
, который открывается изRootViewController
как модальное представлениеСоединил кнопку
Open Modal
с модальнымUINavigationController
и назвал ееnavigationSegue
Создайте
ViewController
,TableViewController
иCollectionViewController
Соедините модальный
UINavigationController
сViewController
в качестве контроллера корневого представления.Соедините
ViewController
сTableViewController
как триггерный переход (вручную) с именемviewToTableSegue
Соедините
TableViewController
сCollectionViewController
как триггерный переход (вручную) с именемtableToCollectionSegue
Соедините кнопку
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)
}
Что я прочитал:
- performSegueWithIdentifier не имеет перехода с идентификатором
- У получателя нет сообщения об ошибке перехода с идентификатором
- performSegueWithIdentifier не приводит к переходу с ошибкой идентификатора
- Ошибка перехода: ViewController не имеет перехода с идентификатором
- И больше
Что я пробовал:
- Убедитесь, что идентификаторы перехода указаны правильно и действительно подключены.
- Сбросить все настройки и содержимое симулятора
- Очистите папки сборки Xcode и каталог
~/Library/Developer/Xcode/DerivedData/
- Переименовать раскадровку
- Перезапустите и перестройте проект Xcode
- Перезагрузите Mac