STORYBOARD - не содержит контроллер вида с идентификатором
Я продолжаю получать следующую ошибку:
Storyboard (<UIStoryboard: 0x7ebdd20>) doesn't contain a view controller
with identifier 'drivingDetails'
Это код:
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"drivingDetails"];
controller.title = [[dao libraryItemAtIndex:indexPath.row] valueForKey:@"name"];
[self.navigationController pushViewController:controller animated:YES];
}
Я уже установил identifier
в UIStoryboard
, но я все еще получаю эту ошибку.
![enter image description here]()
Ответы
Ответ 1
Фиксированный! Необходимо указать не только идентификатор в segue, в моем случае DrivingDetails, но и идентификатор в моем TableViewController должны быть установлены как DrivingDetails... проверьте изображение:
![enter image description here]()
Я также удалил контроллер навигации, так что теперь два контроллера табличного представления напрямую связаны с анимацией "push".
***** EDIT для XCODE 7.0 *****
вам нужно установить storyboardId (в этом случае viewController встроен в контроллер навигации:
let lastMinVc = mainStoryBoard.instantiateViewControllerWithIdentifier("lastMinuteNavController") as! UINavigationController
![введите описание изображения здесь]()
Ответ 2
Только для справок в будущем:
Я разрабатываю iOS 6 с помощью раскадровки.
У меня была такая же проблема, но я не смог найти поле "Идентификатор" в инспекторе.
Вместо этого просто установите поле с именем "Идентификатор раскадровки" на то, что вы бы назвали Идентификатором. Это поле можно найти в закладке "Показать инспектор удостоверений" в инспекторе.
[Примечание. Комментарии ниже показывают, что некоторые люди обнаружили, что им нужно (также?) установить поле "Идентификатор восстановления" чуть ниже идентификатора раскадровки в инспекторе. Нажатие "Использовать идентификатор раскадровки" кажется недостаточным.]
Вот изображение ниже для справки: (в этом случае я назвал свой идентификатор таким же, как мой класс)
![enter image description here]()
Ответ 3
В XCODE 7 | 8 | 9,
когда вы изменяете идентификаторы раскадровки и получаете такие ошибки,
просто CLEAN ваш проект (CMD + SHIFT + K)
Ответ 4
Иногда возникает путаница между терминами.
// Swift 4
let storyboard = UIStoryboard(name: "StoryboardFileName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "StoryboardID")
self.present(controller, animated: true, completion: nil)
Обратите внимание, что "StoryboardFileName"
- это имя файла раскадровки, а не идентификатор, где "StoryboardID"
- это фактически идентификатор, который вы вручную установили в инспекторе идентификации. Иногда люди смущаются из-за разницы между ними, когда считают, что первый на самом деле является StoryboardID, а второй - именем класса ViewController.
![Storyboard ID]()
Ответ 5
Идентичность, расположенная на вкладке "Инспектор удостоверений" с именем "Искатель раскадровки" для Xcode 6.3.2 и флажок "Использовать идентификатор раскадровки".
![enter image description here]()
Ответ 6
Просто эта проблема возникла после добавления нового VC в раскадровку, но только на устройстве, а не на симуляторе. Оказывается, это связано с наличием нескольких локализаций раскадровки - VC был добавлен только к первому. Я попытался удалить другие локализации (один из которых - тот, который использует мой iPhone), но все еще имел ошибку. В конце концов мне пришлось воссоздать другие локализации с новым VC в каждом из них.
Ответ 7
Я нашел это...
нажмите на контроллер вида в раскадровке,
щелкните третий значок слева на инспекторе атрибутов vc - тот, где вы установили имя вызова
на этом scereen он говорит "identity" - мой был скрыт, мне пришлось щелкнуть по слову identity
он показывает showboardID - добавляет идентификатор из кода, выполненный
Ответ 8
Модифицировать "Идентификатор раскадровки" в инспекторе идентификации (третий значок слева) должен работать.
Если нет, и вы уверены, что нет опечатки, попробуйте очистить проект ( "Продукт" → "Очистить" или просто команду + сдвиг + K).
Ответ 9
Компилятор показывает следующую ошибку:
Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Storyboard (<UIStoryboard: 0x7fedf2d5c9a0>) doesn't contain a
ViewController with identifier 'SBAddEmployeeVC''
Здесь объект созданной раскадровки - не главная раскадровка, содержащая наши ViewControllers. Поскольку файл раскадровки, над которым мы работаем, называется
Main.storyboard. Поэтому нам нужно иметь ссылку на объект Main.storyboard.
Для этого используйте следующий код:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
Здесь storyboardWithName
- имя файла раскадровки, с которым мы работаем, и bundle
указывает пакет, в котором находится наша раскадровка (т.е. mainBundle
).
Ответ 10
Для тех, у кого такая же проблема, как у @Ravi Bhanushali, вот решение Swift 4:
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
Ответ 11
Несколько из моих диспетчеров представлений не указали атрибут storyboardIdentifier.
До:
<viewController
id="pka-il-u5E"
customClass="YourViewControllerName"
customModule="ModuleName"
customModuleProvider="target"
sceneMemberID="viewController">
После:
<viewController
storyboardIdentifier="YourViewControllerName" <----
id="pka-il-u5E"
customClass="YourViewControllerName"
customModule="ModuleName"
customModuleProvider="target"
sceneMemberID="viewController">
Ответ 12
При вводе идентификатора u не выбран правильный контроллер просмотра, просто проверьте один раз, если повторите процедуру еще раз.
Ответ 13
У меня такая же ошибка, и я мог бы исправить это, изменив следующие изменения в моем проекте. Я упомянул имя моего класса в панели инспектора, тогда проблема решена.
Goto- > правая панель там Identity Inspector
В разделе пользовательского класса
класс: ваше имя класса (ViewController)
В разделе Identity
Искажение раскадровки: ваш идентификатор раскадровки (имя viewController)
После этого нажмите "Использовать идентификатор раскадровки" там. Это проблема. Надеюсь, это поможет вам....
Ответ 14
Используйте свой идентификатор (@ "driveDetails" ) в качестве идентификатора раскадровки.
Ответ 15
Я пробовал все вышеперечисленные решения, и никто не работал.
Что я сделал:
- Проект чистый
- Удалить производные данные
- Перезапустить Xcode
- Повторно введите идентификатор StoryboardID, показанный в предыдущих ответах (внутри IB).
И потом это сработало. Шокирующая вещь заключалась в том, что я ввел идентификатор Storyboar в конструкторе интерфейса, и он был удален/удален после открытия Xcode снова.
Надеюсь, это поможет кому-то.
Ответ 16
очень просто выбрать соответствующий контроллер представления в основной панели рассказов и проверить раскадровую панель, если ее настоящая она использует ее в идентификаторе, чтобы дать имя и использовать его.
здесь мой первый - это storyboardID
let vc = self.storyboard?.instantiateViewController(withIdentifier: "firstone" ) как! tabBarViewController
Ответ 17
Очистка всех вещей и закрытие Xcode не решили проблему для меня.
Мне пришлось удалить viewController и создать новый с новым идентификатором.
Ответ 18
XCODE DRAG N DROP PANE УЖЕ !!!
![enter image description here]()