Подтвердить что ты не робот

ИСКЛЮЧЕНИЕ СТОРОДИРОВАНИЯ - Раскадровка не содержит контроллера вида с идентификатором

В настоящее время я разрабатываю приложение для iOS для iPhone и iPad. Я пытаюсь показать NavigationController, чтобы создать модуль, который показывает файлы. В iPhone он работает отлично, но я не могу заставить его работать в iPad.

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

'Storyboard (<UIStoryboard: 0x919b200>) doesn't contain a view controller with identifier 'FilesNavigation''

и это код:

case 10: // Files
{
  UINavigationController *navigationController = [storyboard instantiateViewControllerWithIdentifier:@"FilesNavigation"];

  FilesViewController *filesViewController = [storyboard instantiateViewControllerWithIdentifier:@"Files"];

  [navigationController pushViewController:filesViewController animated:YES];

  self.slidingViewController.topViewController = navigationController;

  break;
}

И в моем раскадровке я уже установил идентификатор раскадровки для навигационного контроллера.

>##Custom Class 
>Class: UINavigationController
>##Identity
>Storyboard ID: FilesNavigation

Я использовал этот код для другого случая в блоке switch/case для другого модуля, и он тоже работает для iPad, это первый раз, когда у меня есть эта ошибка.

4b9b3361

Ответ 1

Я понял, проблема в том, что раскадровка не обновлялась на устройстве.

  • Удалите приложение из симулятора /iPhone/iPad
  • Продукт > Очистка
  • Сборка и запуск

Как указано в ответе @T0m_Twt в этом question

Ответ 2

В правой панели в разделе инспектора идентификатора укажите идентификатор раскадровки на ваш навигационный контроллер.

Я сделал скриншот для вас

enter image description here

Ответ 3

Здесь другой случай:

Существуют две локализованные раскадровки. Только один из них имеет контроллер вида, который вы хотите.

Ответ 4

Случайно, у вас есть раскадровка для iPhone и другая для iPad? Если вы это сделаете, то iPad может не иметь раскадровки с этим идентификатором. Кроме того, при работе на iPad, установите точку останова в коде и проверьте, что такое объект "раскадровки".

Я использую категорию на UIStoryboard, которая даст мне раскадровки для каждой платформы.

Я могу использовать [UIStoryboard storyboardHome], и ​​это определит, нужен ли ему iPad или iPhone, и верните это мне. Я также гарантирую, что мои раскадровки следуют правильному наименованию. Поэтому у меня были бы Home_iPad и Home_iPhone.

Ответ 5

TL; DR - очистить все и удалить старую версию приложения, если есть.

Это может показаться сумасшедшим, но предположим, что если вы изменили имя цели, которое также изменило имя пакета, у вас может быть установлена ​​как старая, так и новая версия приложения, установленного в симуляторе/устройстве, и это может вызвать проблемы для UIStoryboard экземпляр не смог создать экземпляр некоторых контроллеров представлений, что в конечном итоге может вызвать проблемы, описанные в вопросе. Чтобы решить эту проблему, вам нужно удалить все связанные приложения или просто reset симулятор/устройство.