IOS 7 - Не удалось создать экземпляр контроллера по умолчанию
Я использую Xcode 5 во вновь созданном приложении, и когда я просто его создаю, я запускаю кнопку запуска, нажимаю на него, затем проект создается, но он не отображается в iOS Simulator, и я получаю следующее сообщение:
Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' -
perhaps the designated entry point is not set?
Я, конечно, об этом разобрался, и все отмечают, что это происходит, потому что XCode еще не знает, какой контроллер представлений является исходным. Но странно, что я создал приложение как основанное на странице (также попробованное приложение с одним и несколькими вкладками), и XCode уже определил для него раскадровку.
Кроме того, когда я перехожу к основному интерфейсу проекта, раскадровка (называемая "Main" самой Xcode) установлена, а в Storyboard мой контроллер представления установлен как "Начальный контроллер просмотра"
![enter image description here]()
Что не так?
Ответы
Ответ 1
Так и случилось со мной. Поверьте, я проверил 50 раз, и мой "Контроллер начального просмотра" был проверен. Это случилось неожиданно. Так как я это исправил?
- Создайте новую раскадровку в своем проекте, назовите ее чем-то вроде Main_iPhoneV2 (или iPadV2 в зависимости от вашего оригинального стиля раскадровки).
- Откройте сломанную раскадровку, щелкните в любом месте белой области и нажмите команду-a, затем команду-c (выберите все и скопируйте)
- Откройте новую раскадровку и нажмите команду-v, чтобы вставить ту же самую точную настройку
- Перейдите в настройки своего проекта, измените свой "Основной интерфейс" на новый Main_iPhoneV2 (если это ваш iPad и вы пишете универсальное приложение, вам придется отредактировать -Info.plist и искать значение " Основное имя основной раскадровки (iPad).
- Перекомпилируйте и прекратите вытягивать волосы.
Ответ 2
Отметьте Контроллер начального просмотра в Инспекторе атрибутов.
![enter image description here]()
Ответ 3
Сначала щелкните на контроллере просмотра в правой части панели Утилиты. Затем выберите Attributes Inspector и убедитесь, что в разделе "Контроллер просмотра" отмечен флажок "Исходный контроллер просмотра" !
Ответ 4
Использование Interface Builder:
Проверьте, установлен ли "Контроллер начального представления". Вы можете установить его, используя следующие шаги:
- Выберите свой контроллер просмотра (который должен отображаться как начальный экран).
- Выберите "Инспектор атрибутов" в окне "Утилиты".
- Выберите "Исходный контроллер просмотра" из раздела "Контроллер просмотра" (если нет).
Если вы сделали этот шаг и все еще получаете ошибку, тогда uncheck and do it again.
![Шаги для решения проблемы]()
Использование программно:
Objective-C:
self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; // <storyboard id>
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];
return YES;
Swift:
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var objMainViewController: MainViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainController") as! MainViewController
self.window?.rootViewController = objMainViewController
self.window?.makeKeyAndVisible()
return true
Ответ 5
Настройте окно вручную,
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if (!application.keyWindow.rootViewController)
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *myViewController= [storyboard instantiateViewControllerWithIdentifier:@"myViewController identifier"];
application.keyWindow.rootViewController = myViewController;
}
}
Ответ 6
Это предупреждение также сообщается, если у вас есть код:
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.rootViewController = myAwesomeRootViewController
window?.makeKeyAndVisible()
В этом случае перейдите на первую страницу целевых настроек и установите для параметра Main Interface
значение empty, так как вам не нужна запись в виде раскадровки для вашего приложения.
Ответ 7
Продукт "Чистый" был для меня решением.
Ответ 8
Я получаю эту ошибку, когда меняю имя файла раскадровки Main.storyboard "TO:" XXX.storyboard "
Решение для меня было:
- Product- > Clean
- ИЗМЕНИТЬ: Поддержка файлов → info.plist → Основная база данных основной раскадровки → Главная TO: XXX
Удача
Ответ 9
Если вы добавили новую раскадровку, вам нужно проверить следующие пункты.
1) В вашем файле plist проверьте значение базового имени основной раскадровки (iPad) или (iPhone) с вашим именем файла раскадровки (не добавляйте расширение .storyboard)
2) В раскадровке должен быть один контроллер вида, который устанавливается как Является ли контроллер начального представления
3) Очистите и создайте свой проект.:)
![введите описание изображения здесь]()
Ответ 10
![введите описание изображения здесь]()
Помимо правильного ответа, также убедитесь, что вы установили правильный основной интерфейс в целом.
Ответ 11
Если вы регулярно управляете своим кодом для контроля источника, это может сэкономить вам хлопоты на создание новой раскадровки и, возможно, вызвать больше проблем...
Я смог решить это, сравнив исходный код Git версии, которая работала против сломанной. Разница показала, что первая строка должна содержать идентификатор начального контроллера представления, в моем случае initialViewController = "Q7U-eo-vxw" . Я искал исходный код, чтобы убедиться, что идентификатор существует. Все, что мне нужно было сделать, это вернуть его, и все снова сработало!
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="Q7U-eo-vxw">
<dependencies>
<deployment defaultVersion="1296" identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
</dependencies>
<scenes>
Ниже приведены некоторые шаги, которые помогут вам устранить неполадки:
- Щелкните правой кнопкой мыши неудачную раскадровку и используйте Source Control > Commit..., чтобы сохранить ваши изменения со времени последнего коммита.
- Попробуйте щелкнуть правой кнопкой мыши свою неудачную раскадровку и использовать "Открыть как > исходный код", чтобы просмотреть XML раскадровки.
- В элементе документа найдите атрибут с именем " initialViewController". Если он отсутствует, не беспокойтесь, мы это исправим. Если он есть, дважды щелкните идентификатор, назначенный ему, command-c, чтобы скопировать его, command-f command-v, чтобы найти его глубже в документе. Это идентификатор контроллера, который должен предоставить начальное представление. Если это не определено в документе, это проблема - вы должны удалить его из тега документа, в моем случае initialViewController = "Q7U-eo-vxw" .
- Перейдите в пункт меню Xcode под названием "Просмотр" и выберите "Редактор версий" > "Показать сравнение"
- Это показывает вашу локальную версию слева и историческую версию справа. Нажмите на дату под исторической версией, чтобы получить список коммитов для этой истории. Выберите тот, который вы знаете, и сравните элемент document. Что такое идентификатор * initialViewController? Разве это другое? Если да, попробуйте вручную отредактировать его и запустить.
![xcode historical compare tool in action]()