Я целый день пытаюсь исправить ошибку "не имеет идентификатора" и застрял.
Сообщение об ошибке:
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:
Создано 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
, это работает.
( 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