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), а в раскадровке мой контроллер вида устанавливается как "начальный контроллер вида"



enter image description here



что не так?

718   13  

13 ответов:

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

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

Регистрация - Это Начальное Представление-Контроллер в Инспекторе атрибутов.

enter image description here

сначала нажмите на контроллер вида в правой части утилиты бар. Далее выберите Атрибуты Инспектора и убедитесь, что в разделе контроллера вида - Это Начальное Представление-Контроллер' есть!

С Помощью Построителя Интерфейса :

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

  1. выберите посмотреть контроллер (который должен появиться в качестве начального экрана).
  2. выберите инспектора атрибут С утилиты (если нет).

Если вы сделали этот шаг и все еще получаете ошибку, то 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

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

- (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. перейти к основному.раскадровка.
  2. Регистрация Is Initial View Controller на вкладке инспектор атрибутов.

Is Initial View Controller in the Attributes Inspector.

продукт "чистый" был решением для меня.

enter image description here

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

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

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

2) в раскадровке должен быть один контроллер вида, который устанавливается как - Это начальное представление-контроллер

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

enter image description here

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

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

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

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

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

var window: UIWindow? 

а также проверьте раскадровку вашей информации.plist файл.

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

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

Comments

    Ничего не найдено.