it-swarm.com.ru

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) устанавливается, а в раскадровке мой контроллер представления устанавливается как "Initial View Controller"

enter image description here

Что случилось?

88
rodrigoalves

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

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

Отметьте Is Initial View Controller в Инспекторе Атрибутов.

enter image description here

298
Ashvin Ajadiya

Сначала нажмите на View Controller в правой части Утилиты бар. Затем выберите Attributes Inspector и убедитесь, что в разделе View Controller установлен флажок 'Is Initial View Controller'!

39
Andy

Использование Interface Builder:

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

  1. Выберите контроллер вида (который должен отображаться в качестве начального экрана).
  2. Выберите Инспектор атрибутов в окне Утилиты .
  3. Выберите ' Is Initial View Controller ' в разделе View Controller (если нет).

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

Steps to solve problem

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

Цель-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
14
Jayprakash Dubey

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

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

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

13
superarts.org

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

- (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;
     }
}
10
Shamsudheen TK

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

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

Is Initial View Controller in the Attributes Inspector.

8
Cons Bulaquena

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

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

  • Product-> Clean
  • ИЗМЕНЕНИЕ: Вспомогательные файлы -> info.plist -> Основное имя файла основной раскадровки -> Main TO: XXX

Удачи

5
Hovanes Mosoyan

enter image description here

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

3
Naren

Продукт "Чистый" стал для меня решением.

3
Walter Schurter

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

1) В вашем файле plist проверьте значение Основное имя основного файла раскадровки (iPad) или (iPhone) ) должно совпадать с именем файла вашей раскадровки ( не добавлять расширение . Раскадровка )

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

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

enter image description here

2
Sachin Nikumbh

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

Я был в состоянии решить эту проблему путем сравнения исходного кода 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. Щелкните правой кнопкой мыши на сбойном раскадровке и используйте Source Control> Commit ..., чтобы сохранить ваши изменения с момента последнего коммита.
  2. Попробуйте щелкнуть правой кнопкой мыши на сбойном раскадровке и используйте "Открыть как> Исходный код", чтобы просмотреть XML раскадровки.
  3. В элементе документа найдите атрибут с именем "initialViewController". Если оно отсутствует, не волнуйтесь, мы исправим это. Если он есть, дважды щелкните по назначенному ему идентификатору, command-c, чтобы скопировать его, command-f command-v, чтобы найти его глубже в документе. Это идентификатор контроллера, который должен обеспечить первоначальный вид. Если он не определен в документе то, что проблема - вы должны удалить его из тега документа, в моем случае initialViewController = "Q7U-ео-VxW" .
  4. Перейти к Xcode меню пункт называется View и выберите версию редактора> Show View Comparison
  5. Это показывает вашу локальную версию на левом и историческую версию справа. Нажмите на дату ниже исторической версии, чтобы получить список коммитов для этой раскадровки. Выберите тот, который вы знаете, обработанным и сравнить документ элемент. Что такое идентификатор * initialViewController? Это другое? Если это так, попробуйте отредактировать его вручную и запустить. xcode historical compare tool in action
1
neoscribe

Проверьте, есть ли у вас var окна в AppDelegate.

var window: UIWindow? 

А также проверьте раскадровку вашего файла Info.plist.

<key>UIMainStoryboardFile</key>
<string>Main</string>

Программная установка rootViewController в AppDelegate не устранит предупреждение. Вы должны выбрать, разрешить ли раскадровке установить контроллер представления или сделать это программно.

0
rockdaswift