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 enter image description here