Ответ 1
Я понял, проблема в том, что раскадровка не обновлялась на устройстве.
- Удалите приложение из симулятора /iPhone/iPad
- Продукт > Очистка
- Сборка и запуск
Как указано в ответе @T0m_Twt в этом question
В настоящее время я разрабатываю приложение для 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, это первый раз, когда у меня есть эта ошибка.
Я понял, проблема в том, что раскадровка не обновлялась на устройстве.
Как указано в ответе @T0m_Twt в этом question
В правой панели в разделе инспектора идентификатора укажите идентификатор раскадровки на ваш навигационный контроллер.
Я сделал скриншот для вас
Здесь другой случай:
Существуют две локализованные раскадровки. Только один из них имеет контроллер вида, который вы хотите.
Случайно, у вас есть раскадровка для iPhone и другая для iPad? Если вы это сделаете, то iPad может не иметь раскадровки с этим идентификатором. Кроме того, при работе на iPad, установите точку останова в коде и проверьте, что такое объект "раскадровки".
Я использую категорию на UIStoryboard, которая даст мне раскадровки для каждой платформы.
Я могу использовать [UIStoryboard storyboardHome], и это определит, нужен ли ему iPad или iPhone, и верните это мне. Я также гарантирую, что мои раскадровки следуют правильному наименованию. Поэтому у меня были бы Home_iPad и Home_iPhone.
TL; DR - очистить все и удалить старую версию приложения, если есть.
Это может показаться сумасшедшим, но предположим, что если вы изменили имя цели, которое также изменило имя пакета, у вас может быть установлена как старая, так и новая версия приложения, установленного в симуляторе/устройстве, и это может вызвать проблемы для UIStoryboard
экземпляр не смог создать экземпляр некоторых контроллеров представлений, что в конечном итоге может вызвать проблемы, описанные в вопросе. Чтобы решить эту проблему, вам нужно удалить все связанные приложения или просто reset симулятор/устройство.