iOS 7-не удается создать экземпляр контроллера вида по умолчанию
Я использую Xcode 5 в недавно созданном приложении, и когда я просто создаю его, я иду на кнопку запуска e нажмите на нее, затем проект будет построен, но он не отображается в симуляторе iOS, и я получаю следующее сообщение:
Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' -
perhaps the designated entry point is not set?
я гуглил об этом, конечно, и все указывают, что это происходит, потому что XCode еще не знает, какой контроллер вида является начальным. Но странно то, что я создал приложение как страницу на основе (также пробовал однократный просмотр и параметры приложения с вкладками) приложение и XCode уже определили раскадровку для него.
кроме того, когда я перехожу к основной опции интерфейса проекта, устанавливается раскадровка (названная "Main" самим Xcode), а в раскадровке мой контроллер вида устанавливается как "начальный контроллер вида"

что не так?
13 ответов:
Так что это тоже случилось со мной тоже. Я проверил 50 раз, и мой "начальный контроллер Вида" был проверен, поверьте мне. Это случилось на ровном месте. Так как же мне это исправить?
- создайте новую раскадровку в своем проекте, назовите ее чем-то вроде Main_iPhoneV2 (или iPadV2 в зависимости от вашего оригинального стиля раскадровки)
- откройте сломанную раскадровку, щелкните в любом месте белой области и нажмите command-a, затем command-c (выберите все и скопируйте)
- откройте новый раскадровка и нажмите command-v, чтобы вставить ту же самую точную настройку
- перейдите в настройки вашего проекта, измените свой "основной интерфейс" на новый Main_iPhoneV2 (если это ваш iPad, и вы пишете Универсальное приложение, вам нужно будет отредактировать-Info.plist и искать значение "основные раскадровки базового имени файла (для iPad)
- Перекомпилируйте, и перестаньте вытаскивать волосы
сначала нажмите на контроллер вида в правой части утилиты бар. Далее выберите Атрибуты Инспектора и убедитесь, что в разделе контроллера вида - Это Начальное Представление-Контроллер' есть!
С Помощью Построителя Интерфейса :
проверить, если ' - Это начальное представление-контроллер установлен. Вы можете установить его, используя следующие шаги:
- выберите посмотреть контроллер (который должен появиться в качестве начального экрана).
- выберите инспектора атрибут С утилиты (если нет).
Если вы сделали этот шаг и все еще получаете ошибку, то
uncheck and do it again.использование программно :
Цель-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
настройка окна вручную,
- (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; } }
это предупреждение также, если у вас есть код типа:
window = UIWindow(frame: UIScreen.mainScreen().bounds) window?.rootViewController = myAwesomeRootViewController window?.makeKeyAndVisible()в этом случае перейдите на первую страницу целевых настроек и установите
Main Interfaceдля пустой, так как вам не нужна запись раскадровки для вашего приложения.
Я получаю эту ошибку, когда меняю имя файла раскадровки" Main.раскадровка " TO:"ХХХ.раскадровка"
решение для меня было:
- Продукт->Очистить
- изменения: Вспомогательные Файлы ->информация.файл plist ->основные раскадровки базового имени файла -> Main TO: XXX
Удачи
Если вы добавите новую раскадровку, то вы должны проверить следующие пункты.
1) в вашем файле plist проверьте значение основные раскадровки базового имени файла (iPad) или (iPhone) должны совпадать с именем файла раскадровки (не добавлять расширение .раскадровка)
2) в раскадровке должен быть один контроллер вида, который устанавливается как - Это начальное представление-контроллер
3) чистый и построить свой проект. :)
Если вы регулярно передаете свой код в систему управления версиями, это может избавить вас от необходимости создавать новую раскадровку и, возможно, вводить больше проблем...
я смог решить эту проблему, сравнив исходный код Git версии, которая работала против сломанной. Diff показал, что первая строка должна содержать идентификатор начального контроллера вида, в моем случае,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>вот некоторые шаги, которые могут помочь вам устранить:
- щелкните правой кнопкой мыши неудачную раскадровку и используйте управление версиями > фиксация... чтобы сохранить изменения, внесенные с момента последней фиксации.
- попробуйте щелкнуть правой кнопкой мыши свою неудачную раскадровку и использовать "открыть как > исходный код" для просмотра XML раскадровки.
- In элемент документ элемент, найдите атрибут с именем" initialViewController". Если он отсутствует, не волнуйтесь, мы это исправим. Если он есть, дважды щелкните идентификатор, назначенный ему, command-c, чтобы скопировать его, command-f command-v, чтобы найти его глубже в документе. Это идентификатор контроллера, который должен предоставить начальное представление. Если он не определен в документе, то это проблема - вы должны удалить его из тега документа, в моем случае initialViewController= "Q7U-eo-vxw".
- перейдите в пункт меню Xcode под названием View и выберите редактор версий > показать сравнение View
- это показывает вашу локальную версию слева и историческую версию справа. Нажмите на дату под исторической версией, чтобы получить список коммитов для этой раскадровки. Выберите тот, который вы знаете, работал и сравнить документ элемент. Что такое идентификатор * initialViewController? Разве это по-другому? Если это так, попробуйте отредактировать его вручную и запустить.
![]()
проверьте, есть ли у вас окно var в AppDelegate.
var window: UIWindow?а также проверьте раскадровку вашей информации.plist файл.
<key>UIMainStoryboardFile</key> <string>Main</string>программная установка rootViewController в AppDelegate не исправит предупреждение. Вы должны выбрать, разрешить ли раскадровке установить контроллер вида или сделать это программно.





Comments