2014-01-02 3 views
83

Я использую Xcode 5 во вновь созданном приложении, и когда я просто его создаю, я запускаю кнопку запуска, нажимаю на нее, затем проект создается, но не отображается в КСН Simulator и я получаю следующее сообщение:iOS 7 - Не удалось создать экземпляр контроллера по умолчанию

Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - 
perhaps the designated entry point is not set? 

Я гугле об этом, конечно, и все указывает на то, что это происходит потому, что XCode еще не знает, какой вид контроллер является исходным. Но странно, что я создал приложение как основанное на странице (также попробованное приложение с одним и несколькими вкладками), и XCode уже определил для него раскадровку.

Кроме того, когда я иду в основной вариант интерфейса проекта раскадровка (названный «Main» самой Xcode) устанавливается, и в раскадровке, мой контроллер представления устанавливается как «Initial View Controller»

enter image description here

Что не так?

+0

пытаются установить его programically ... –

+0

@Ramshad Привет, Я вроде новичка на развитие IOS. Как я могу это сделать? – rodrigoalves

+0

Я ответил. –

ответ

44

Так это же случилось и со мной. Поверьте, я проверил 50 раз, и мой «Контроллер начального просмотра» был проверен. Это случилось неожиданно. Так как я это исправил?

  1. Создать новый раскадровки в проекте, назвать это что-то вроде Main_iPhoneV2 (или iPadV2 в зависимости от вашего оригинального стиля раскадровки)
  2. Открыть сломанный раскадровки, щелкните в любом месте в белой области и пресс командно-а, то command-c (выберите все и скопируйте)
  3. Откройте новую раскадровку и нажмите команду-v, чтобы вставить ту же самую точную настройку.
  4. Перейдите к своим настройкам проекта, измените свой «Основной интерфейс» на новый Main_iPhoneV2 (если это ваш iPad и вы пишете универсальное приложение, вам нужно будет отредактировать файл -Info.plist и посмотреть значение «Основное имя основного файла раскадровки (iPad)
  5. Рекомпилированные, и остановить потянув ваши волосы
+2

, столкнувшись с той же проблемой при попытке выполнить шаги, перечисленные в Основах разработчика. Создал новую раскадровку, обозначил новую как начальный контроллер представления и установил новую как основную доску объявлений через информацию о развертывании проектов. Он волшебным образом начал работать. Не уверен, что его ошибка с Xcode. https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOS/FirstTutorial.html#//apple_ref/doc/uid/TP40011343-CH3-SW1 – ioWint

+0

Существует гораздо более простое решение, пожалуйста, голосов. –

+1

«5. Перекомпилируйте и прекратите вытягивать волосы»; великолепно! –

10

Настройка окна вручную,

- (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; 
    } 
} 
+0

Требуется ли для снятия отметки с начального диспетчера представлений в раскадровке? – bdv

+0

как-то это не работает для меня. это приводит меня в тупик – smoothumut

279

Проверьте ли Initial View Controller в Инспекторе Атрибутов.

enter image description here

+0

Конечно, это «способ, которым он должен работать». Но я тоже столкнулся с «ошибкой», и тогда это не сработает. Создание нового, и копирование всех ваших вещей действительно сработало! в моем случае. – Tys

+0

Но его контроллер представления уже установлен как контроллер начального просмотра, не так ли? – Iurii

+0

@YuraVasylenko: Его не было раньше, поэтому я указал пометить как выбранный. – iBapu

38

Сначала нажмите на View Controller в правой части Utilities бар. Затем выберите Attributes Inspector и убедитесь, что в разделе View Controller установлен флажок «Контроллер начального просмотра»!

+1

Это была моя проблема. Я удалил контроллер представления по умолчанию, который был у моей раскадровки, и когда я добавил, что другой должен был проверить это. – Orgmir

+1

Прекрасно работающая находка .. спасибо приятелю ... !!!! :) –

+1

Это истинный ответ. – djunod

3

Продукт «Чистый» был для меня решением.

1

Если вы регулярно совершаете свой код для управления версиями, это может спасти вас от хлопот создания нового раскадровки и, возможно, вводя больше проблем ...

я был в состоянии решить эту проблему путем сравнения источника 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> 

Вот несколько шагов, которые могут помочь вам устранить:

  1. правой кнопкой мыши сбойный раскадровки и использовать Control Source> Commit ... чтобы сохранить изменения после последней фиксации.
  2. Попробуйте щелкнуть правой кнопкой мыши свою неудачную раскадровку и использовать «Открыть как> исходный код», чтобы просмотреть XML раскадровки.
  3. В документе , найдите атрибут с именем «initialViewController». Если он отсутствует, не беспокойтесь, мы это исправим. Если он есть, дважды щелкните идентификатор, назначенный ему, command-c, чтобы скопировать его, command-f command-v, чтобы найти его глубже в документе. Это идентификатор контроллера, который должен предоставить начальное представление. Если это не определено в документе, то это проблема - вы должны удалить ее из тега документа, в моем случае initialViewController = "Q7U-eo-vxw".
  4. Перейдите в пункт меню Xcode, который называется Просмотр и выберите Редактор версий> Показать сравнение.
  5. Это показывает вашу локальную версию слева и историческую версию справа. Нажмите на дату под исторической версией, чтобы получить список коммитов для этой истории. Выберите тот, который, как вы знаете, работал, и сравните элемент . Каков идентификатор * initialViewController? Разве это другое? Если да, попробуйте вручную отредактировать его и запустить. xcode historical compare tool in action
4

Я получаю эту ошибку, когда я изменить имя файла по раскадровка "Main.storyboard" TO: "XXX.storyboard"

Решение для меня было:

  • Продукт-> Чистота
  • CHANGE: Поддерживаемые файлы ->info.plist ->Главная раскадровка имя файла базы ->Главная TO: XXX

Good Luck

13

Используя Interface Builder:

Проверьте, если "Установлен контроллер начального вида '.Вы можете установить его, используя следующие шаги:

  1. Выберите контроллер представления (который должен быть появился как начальный экран).
  2. Атрибут инспектора от Коммунальные услуги окно.
  3. Выбрать 'Контроллер начального вида' от Просмотреть контроллер раздел (если нет).

Если вы сделали этот шаг и по-прежнему получаю сообщение об ошибке, то uncheck and do it again.

Steps to solve problem

Использование программно:

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 
+3

это действительно помогает мне и сэкономить мое время. Спасибо за вас :) –

+2

Если вы делаете это программно, обязательно удалите свою раскадровку из основного интерфейса вашей цели - просто оставьте ее пустой. Также это должно идти в 'doneFinishLaunchingWithOptions'. – Joey

9

Это предупреждение также сообщается, если у вас есть код, как:

window = UIWindow(frame: UIScreen.mainScreen().bounds) 
    window?.rootViewController = myAwesomeRootViewController 
    window?.makeKeyAndVisible() 

В этом случае перейдите к первой странице целевых параметров и установите Main Interface в пустой, так как вам не нужна запись в виде раскадровки для вашего приложения.

2

Если вы добавили новую раскадровку, вам необходимо проверить следующие пункты.

1) В вашей Plist проверки файла значения Main раскадровка файл базы имя (IPad) или (iPhone) должны быть согласованы с вашим именем файла раскадровки (не добавить расширение .storyboard)

2) В раскадровке должен быть один контроллер вид, на котором установлен как ли начальное представление контроллера

3) очистить d постройте свой проект. :)

enter image description here

3

enter image description here

Помимо выше правильного ответа, а также убедитесь, что вы установили правильный Основной интерфейс в целом.

2

Я испытал это, когда мой контроллер панели вкладок не появился в симуляторе вместе с черным экраном. Я сделал следующее, чтобы мое приложение появилось в симуляторе.

  1. Перейти к Main.storyboard.
  2. Проверьте флажок инспектора атрибутов Is Initial View Controller.

Is Initial View Controller in the Attributes Inspector.

Смежные вопросы