STORYBOARD - не содержит контроллер представления с идентификатором - PullRequest
165 голосов
/ 28 ноября 2011

Я получаю следующую ошибку:

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


Ответы [ 18 ]

237 голосов
/ 23 июля 2012

Только для дальнейшего использования:

Я занимаюсь разработкой для iOS 6 с использованием раскадровок.

У меня возникла та же проблема, но я не смог найти поле «Идентификатор» в инспекторе,Вместо этого просто установите в поле «Storyboard ID» то, что вы бы назвали «Идентификатором».Это поле можно найти на вкладке «Показать инспектор удостоверений» в инспекторе.

[Примечание. Комментарии ниже указывают на то, что некоторые люди обнаружили, что им необходимо (также?) Установить поле «Идентификатор восстановления»чуть ниже Storyboard ID в инспекторе.Нажатие на «Использовать идентификатор раскадровки» кажется недостаточным.]

Ниже приведено изображение для справки: (в данном случае я назвал мой идентификатор так же, как мой класс) enter image description here

182 голосов
/ 20 сентября 2015

В XCODE 7 |8 |9 ,

когда вы меняете идентификаторы раскадровки, и вы получаете подобные ошибки,

просто CLEAN ваш проект ( CMD + SHIFT + K )

41 голосов
/ 29 ноября 2011

Исправлена!В моем случае DrivingDetails должен быть установлен не только идентификатор в segue, но также и идентификатор в моем tableViewController как DrivingDetails ... проверьте мою картинку:

enter image description here

Я также удалил контроллер представления навигации, поэтому теперь 2 контроллера представления таблицы подключены напрямую с помощью анимации «push».

***** EDIT для XCODE 7.0 *****

Вы должны установить storyboardId (в этом случае viewController встроен в контроллер навигации:

let lastMinVc  = mainStoryBoard.instantiateViewControllerWithIdentifier("lastMinuteNavController") as! UINavigationController

enter image description here

15 голосов
/ 04 февраля 2018

Иногда возникает путаница между терминами.

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

Я видел некоторую путаницу вокруг этого, поэтому я подумал опубликовать этот вопрос, который привлекает многих новых программистов в Swift с похожей проблемой.

14 голосов
/ 18 июня 2015

Удостоверение расположено на вкладке Identity Inspector с именем Storyboard ID для Xcode 6.3.2 и отмечено параметром Use Storyboard ID. enter image description here

9 голосов
/ 13 августа 2012

Только что возникла эта проблема после добавления нового ВК в раскадровку, но только на устройстве, а не на симуляторе.Оказывается, это произошло из-за нескольких локализаций раскадровки - VC был добавлен только к основной.Я попытался удалить другие локализации (одну из которых использует мой iPhone), но ошибка все равно была.В конце концов мне пришлось воссоздать другие локализации с новым VC в каждой из них.

4 голосов
/ 01 февраля 2018

Для тех, у кого такая же проблема, как у @Ravi Bhanushali, вот решение Swift 4:

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)

4 голосов
/ 03 февраля 2016

Компилятор показывает следующую ошибку:

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).

4 голосов
/ 08 мая 2015

Изменение «Storyboard ID» в инспекторе идентичности (3-й значок слева) должно работать.

Если нет, и вы уверены, что опечаток нет, попробуйте очистить проект («Продукт» -> «Очистить» или просто команда + Shift + K).

4 голосов
/ 23 апреля 2014

Я нашел это ... нажмите на контроллер представления в раскадровке, щелкните на третьем значке слева на инспекторах атрибутов vc - тот, где вы устанавливаете имя вызова на этом экране, он говорит: «идентичность» - мой был скрыт,Я должен был нажать на слово идентичности, затем он показывает storyboardID - добавить идентификатор из кода, готово

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...