В моей консоли появляется следующая ошибка:
Ожидается, что в конце запуска приложения ожидается контроллер корневого представления
Ниже мой метод application:didFinishLaunchWithOptions
:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Set Background Color/Pattern
self.window.backgroundColor = [UIColor blackColor];
self.tabBarController.tabBar.backgroundColor = [UIColor clearColor];
//self.window.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"testbg.png"]];
// Set StatusBar Color
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
// Add the tab bar controller current view as a subview of the window
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
В Interface Builder делегат UITabBarController
подключается к App Delegate.
Кто-нибудь знает, как исправить эту проблему?
У меня была такая же проблема. Проверьте свой главный .m. Последнему аргументу должно быть присвоено имя класса, реализующего протокол UIApplicationDelegate.
retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
Заменить в AppDelegate
[window addSubview:[someController view]];
к
[self.window setRootViewController:someController];
У меня была такая же ошибка при попытке изменить первый контроллер представления, который был загружен в
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- (void)viewDidLoad
к
- (void)viewDidAppear:(BOOL)animated
и ошибка перестала появляться. Моя проблема была вызвана, например, созданием UIAlertView
.
В вашем случае я предлагаю вам проверить код в контроллере активного вида tabBarController (поскольку это, вероятно, проблема в этом контроллере представления). Если это не сработает, попробуйте установить начальные настройки в файле nib вместо кода - или если вы хотите сделать это в коде, попробуйте переместить код в соответствующий метод управления viewBarController.
Удачи!
viewDidLoad:
(без добавления флага), и при этом я не должен это делать. Независимо, спасибо за предложение!
Это случилось со мной. Решено путем редактирования файла .plist. Укажите базовое имя основного файла nib (должно быть MainWindow.xib). Надеюсь, это поможет.
Я получил это, начиная с шаблона "Пустое приложение", а затем вручную добавляя XIB. Я решил это, установив основное имя Nib, предложенное Sunny. Отсутствующий шаг в этом сценарии удаляет
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
от
application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Так как он перезапишет экземпляр вашего окна, созданного в файле Xib. Предполагается, что вы создали ViewController и подключили его к окну и делегату приложения в файле XIB.
Я сталкиваюсь с той же проблемой в последнее время при создании проекта с помощью ios5 sdk.
Сначала он строился и работал должным образом, но после этого появилась ошибка.
В моем случае решение было довольно простым.
Недостатки заключались в том, что каким-то образом свойство Основной интерфейс на вкладке сводки моего целевого приложения было стерто. Поэтому мне нужно было снова установить его.
Если это не так, и если tabBarController по-прежнему равен нулю, вы всегда можете программно создать свой оконный и корневой контроллер.
В качестве резерва я добавил следующий код в свой проект
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (!window && !navigationController) {
NSLog(@"Window and navigation controller not loaded from nib. Will be created programatically.");
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
UIViewController *viewController1, *viewController2;
viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease];
viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease];
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
self.window.rootViewController = self.tabBarController;
}
else {
[window addSubview:[tabBarController view]];
}
[self.window makeKeyAndVisible];
return YES;
}
Это будет работать только в том случае, если также будет реализовано решение sho.
Я обновился до iOS9 и начал получать эту ошибку из ниоткуда. Я смог его исправить, но добавив код ниже - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow *window in windows) {
if(window.rootViewController == nil){
UIViewController* vc = [[UIViewController alloc]initWithNibName:nil bundle:nil];
window.rootViewController = vc;
}
}
Ни одно из вышеперечисленных предложений не решило мою проблему. Мой был следующим:
Добавить
window.rootViewController = navigationController;
после
[window addSubview:navigationController.view];
в моем appdelegate
- (void)applicationDidFinishLaunching:(UIApplication *)application {
как добавить RootViewController для iOS5
если ваше приложение до сих пор не использовало RootViewController,
просто создайте один;), нажав "Файл" > "Создать" > "Новый файл";
выберите UIViewController subclass
назовите его RootViewController, снимите флажок С XIB для пользовательского интерфейса (если у вас его уже есть)
и поместите этот код в свой AppDelegate:: didFinishLaunchingWithOptions
rootViewController = [[RootViewController alloc] init];
window.rootViewController = rootViewController;
наверняка - вам нужно импортировать RootViewController.h и создать переменную
вот хорошая статья о RootViewController и AppDelegate,
У меня тоже есть проблемы. Я получил проект в xcode4.2.1. Я прочитал все комментарии там, но никто не классный для меня. через некоторое время я обнаружил, что я прокомментировал фрагмент кода.
//self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
то я расколол его. все в порядке для меня. надеюсь, это поможет вам, ребята.
У меня также была эта ошибка, но в отличие от любых ответов, перечисленных ранее, это потому, что я раскомментировал метод loadView в моем новом генераторе (xcode 4.2, ios5).
//Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView
{
}
Он даже сказал мне, что метод предназначен для создания представления программно, но я пропустил его, потому что он выглядел так же, как и другие методы, такие как viewDidLoad, которые я обычно использую, я его не поймал.
Чтобы решить, просто удалите этот метод, если вы не программно создаете иерархию представлений aka, используя nib или раскадровку.
Убедитесь, что у вас есть эта функция в делетете приложения.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {
return YES;
}
Убедитесь, что didFinishLaunchingWithOptions возвращает YES. Если вам удалили строку "return YES", это приведет к ошибке. Эта ошибка может быть особенно распространена среди пользователей раскадровки.
Произошло небольшое изменение вокруг iOS 5.0 или около того, требуя, чтобы у вас был контроллер корневого представления. Если ваш код основан на старом образце кода, например GLES2Sample, в этом образце кода не было создано контроллера корневого представления.
Чтобы исправить (например, GLES2Sample), прямо в applicationDidFinishLaunching
, я создаю контроллер корневого представления и присоединяю к нему glView.
- (void) applicationDidFinishLaunching:(UIApplication *)application
{
// To make the 'Application windows are expected
// to have a root view controller
// at the end of application launch' warning go away,
// you should have a rootviewcontroller,
// but this app doesn't have one at all.
window.rootViewController = [[UIViewController alloc] init]; // MAKE ONE
window.rootViewController.view = glView; // MUST SET THIS UP OTHERWISE
// THE ROOTVIEWCONTROLLER SEEMS TO INTERCEPT TOUCH EVENTS
}
Это заставляет предупреждение уйти и на самом деле не влияет на ваше приложение.
С моим первым представлением MenuViewController
я добавил:
MenuViewController *menuViewController = [[MenuViewController alloc]init];
self.window.rootViewController = menuViewController;
в методе делегирования приложения:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
}
Это сработало.
Попробуйте подключить IBOutlet контроллера панели вкладок к корневому представлению в Interface Builder вместо
self.window.rootViewController = self.tabBarController;
Но на самом деле я не видел такую ошибку раньше.
Я столкнулся с той же проблемой, но использовал storyboard
Назначение my storyboard
InitialViewController
моему окну rootViewController
.
В
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
...
UIStoryboard *stb = [UIStoryboard storyboardWithName:@"myStoryboard" bundle:nil];
self.window.rootViewController = [stb instantiateInitialViewController];
return YES;
}
и это решило проблему.
Я решил проблему, выполнив следующее (ни одно из вышеперечисленных решений не помогло):
Из раскрывающегося меню, связанного с "Основным интерфейсом", выберите другую запись, а затем повторно выберите "MainWindow", затем перестройте.
У меня возникла такая же проблема сразу после обновления до Xcode 4.3, и только при запуске проекта с нуля (т.е. создайте пустой проект, затем создайте UIViewController, а затем создайте отдельный файл nib).
После размещения всех строк, которые я использовал, и обеспечения правильных подключений, я продолжал получать эту ошибку, и файл nib, который я пытался загрузить через контроллер вида (который был установлен как rootController), никогда не показывался в симулятор.
Я создал единый шаблон представления через Xcode и сравнил его с моим кодом и НАКОНЕЦ нашел проблему!
Xcode 4.3 добавляет по умолчанию метод - (void) loadView; к разделу реализации контроллера просмотра. После тщательного чтения комментариев внутри него стало ясно, в чем проблема. Комментарий указывает на переопределение метода loadView при программном программировании (и я перефразирую), иначе НЕ переопределить loadView при использовании ниба. В этом методе ничего больше не было, поэтому во вред я переопределял метод (и ничего не делал) WHILE, используя файл nib, который дал ошибку.
РЕШЕНИЕ заключалось в том, чтобы полностью удалить метод loadView из раздела реализации или вызвать родительский метод, добавив [super loadView].
Удаление было бы лучше, если бы использование файла NIB, поскольку добавление какого-либо другого кода действительно заменит его.
Получена такая же ошибка после замены моего пользовательского интерфейса с помощью раскадровки, используя XCode 4.6.3 и iOS 6.1
Решил его, очистив весь код от didFinishLaucnhingWithOptions в AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
return YES;
}
Если вы используете MTStatusBarOverlay, вы получите эту ошибку.
MTStatusBarOverlay создает дополнительное окно (окна [UIApplication sharedApplication]), в котором нет корневого контроллера.
Это не вызывает проблем.
У меня была та же проблема. Если вы создаете оконное приложение "с нуля", как и я, вам нужно сделать следующее: (обратите внимание, что это шаги для Xcode 4.2.)
0. Убедитесь, что ваш делегат приложения соответствует протоколу UIApplicationDelegate.
Например, предположим, что наш делегат называется MyAppDelegate. В MyAppDelegate.h у нас должно быть что-то вроде этого:
@interface MyAppDelegate :
NSObject <UIApplicationDelegate> // etc...
1. Укажите делегат приложения в main.m
Например,
#import "MyAppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv,
nil, NSStringFromClass([MyAppDelegate class]));
}
}
2. Создайте файл интерфейса главного окна.
Для этого щелкните правой кнопкой мыши проект и выберите "Новый файл". Оттуда выберите "Окно" в разделе iOS → "Пользовательский интерфейс".
После добавления файла в ваш проект перейдите к резюме проекта (щелкните левой кнопкой мыши по проекту, нажмите "Обзор" ). В разделе "Информация о развертывании iPhone/iPod" (и соответствующем разделе iPad, если хотите) и выберите новый файл интерфейса в поле "Основной интерфейс".
3. Подключите все это в редакторе интерфейса
Выберите файл интерфейса в списке файлов, чтобы открыть редактор интерфейса.
Убедитесь, что панель "Утилиты" открыта.
Добавьте новый объект, перетащив объект из списка "Объекты" на панели "Утилиты" в пространство выше вашего объекта "Окно". Выберите объект. Нажмите "Инспектор удостоверений" на панели "Утилиты". Измените класс на делегат приложения (MyAppDelegate, в этом примере.)
Подключите инспектор соединений для MyAppDelegate. Подключите выход окна к окну, которое уже существует в файле интерфейса.
Нажмите "Владелец файла" слева, а затем нажмите "Инспектор удостоверений" на панели "Утилиты". Измените класс на UIApplication
Подключите инспектор соединений для владельца файла. Подключите выход делегата к объекту MyAppDelegate.
4. Наконец, и очень важно, щелкните объект Window в файле интерфейса. Откройте инспектор атрибутов. Убедитесь, что установлен флажок "Видимый при запуске".
Это все, что я должен был сделать, чтобы заставить его работать на меня. Удачи!
В журнале было такое же сообщение об ошибке. У меня появилось UIAlertView в приложении: didFinishLaunchingWithOptions. Я решил это, отложив вызов alertView, чтобы дать возможность контроллеру корневого представления завершить загрузку.
В приложении: didFinishLaunchingWithOptions:
[self performSelector:@selector(callPopUp) withObject:nil afterDelay:1.0];
который вызывает через 1 секунду:
- (void)callPopUp
{
// call UIAlertView
}
OrdoDei дал правильный и ценный ответ. Я добавляю этот ответ только для того, чтобы привести пример метода didFinishLaunchingWithOptions
, который использует его ответ, а также для учета других комментариев относительно контроллера навигации.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
// Instantiate the main menu view controller (UITableView with menu items).
// Pass that view controller to the nav controller as the root of the nav stack.
// This nav stack drives our *entire* app.
UIViewController *viewController = [[XMMainMenuTableViewController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
// Instantiate the app window. Then get the nav controller view into that window, and onto the screen.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// [self.window addSubview:self.navigationController.view];
// The disabled line above was replaced by line below. Fixed Apple complaint in log: Application windows are expected to have a root view controller at the end of application launch
[self.window setRootViewController:self.navigationController];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
Чтобы добавить к Mike Flynn ответ, начиная с обновления до Xcode 7 и запуска моего приложения на устройстве iOS 9, я добавил это в свой (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
// Hide any window that isn't the main window
NSArray *windows = [[UIApplication sharedApplication] windows];
for (UIWindow *window in windows) {
if (window != self.window) {
window.hidden = YES;
}
}
В верхней части ответа "sho", это правильно (четвертый параметр UIApplicationMain должен быть именем основного контроллера), я добавляю несколько комментариев.
Недавно я изменил "модель" приложения my из MainWindow.xib, чтобы построить окно программно. В приложении использовался более старый шаблон, который автоматически создавал этот MainWindow. Поскольку я хотел поддерживать другой вид контроллера XIB для iPhone 5, проще выбрать правильный XIB программно, когда будет создан делегат приложения. Я также удалил MainWindow.xib из проекта.
Проблема заключалась в том, что я забыл заполнить четвертый параметр в главном UIApplication, и я ЗАБЫЛ ОТКЛЮЧИТЬ MainWindow из "основного интерфейса" в резюме проекта.
Это вызвало проблему BIG: это обеспечило безобидное предупреждение "Приложения, ожидаемые..." на устройствах разработки, но когда оно пошло в App Store, оно сломалось на потребительских телефонах, сбой, потому что MainWindow больше не был в комплекте! Мне пришлось запросить ускоренную проверку исправления.
Другой симптом заключается в том, что иногда белый блок, как пустой UIView, иногда появлялся при изменении настроек, и приложение было помещено на передний план. В iPhone 5 было ясно, что это блок 320x480. Возможно, отсутствующий MainWindow создавался в режиме разработки, используя старый размер. Я только что нашел эту ошибку, когда первые сообщения об аварии достигли папки "Входящие".
Установка приложения из App Store вместо XCode показала, что приложение действительно разбилось, и проблема MainWindow обнаружила себя в журнале, поэтому я мог видеть, что это не какая-то особая комбинация устройств + версии IOS.
Мне удалось установить начальный контроллер представления на сводном экране xcode.
Нажмите на самое верхнее имя проекта в левом файловом проводнике (у него должен быть небольшой значок). В центральном столбце щелкните название вашего проекта в разделе "TARGETS" (рядом с ним должен быть маленький значок "A" ). Посмотрите раздел "Информация о развертывании iPhone/iPod" и найдите "Основной интерфейс". Вы можете выбрать вариант из раскрывающегося списка.
Это произошло для меня, потому что я непреднамеренно закомментировал:
[self.window makeKeyAndVisible];
от
- (BOOL)application:(UIApplication*) didFinishLaunchingWithOptions:(NSDictionary*)
Эта ошибка также появляется, когда владелец файла MainWindow.xib установлен неверно.
Владелец файла - это UIApplication
→ вставленный объект класса делегата приложения с выходом окна, подключенным к окну
Эта проблема возникает, если вы неправильно настроили Interface Builder.
Убедитесь, что вы открыли окно App Delegate и viewController:
В MainWindow.xib, удерживайте элемент управления, щелкните App Delegate и перетащите объект Window. Выберите окно. Удерживайте управление и снова выберите делегата приложения, перетащите его на контроллер корневого представления и выберите viewController.
Я получал эту ошибку (Applications are expected to have a root view controller at the end of application launch
), и я программным образом создавал контроллеры представлений.
Решил его, гарантируя, что метод loadView
в моем контроллере корневого представления вызывал [super loadView]
.
self.view = [[UIView new] autorelease];
,
Если ваше приложение заменяет основной UIWindow FingerTipWindow (чтобы показать штрихи на проекторе), и вы не обновили свои источники в течение нескольких (нескольких) лет, ваш объект замены может не включать свойство rootViewController (см. kgn 5/21/2013 mod at GitHub)
Вы можете установить window.rootViewController
в didFinishLaunchingWithOptions
, пока корова не вернется домой, но ваше окно не сообщит об этом "в конце запуска приложения" и выкинет исключение во время выполнения. Обновите источники.
У меня тоже была эта ошибка, но ответа уже не было, но я решил проблему. В моем случае отображение журнала было связано с тем, что я назначил контроллер корневого приложения приложения в другом подпотоке.
-(BOOL) application:(UIApplication*) application didFinishLaunchingWithOptions:(NSDictionary*) launchOptions
{
...
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
...
dispatch_async(dispatch_get_main_queue(), ^{
...
[self updateTabBarTitles];
self.window.rootViewController = self.tabBarController;
...
});
});
[self.window makeKeyAndVisible];
return YES;
}
Переместив назначение rootViewController в конец функции - перед вызовом makeKeyAndVisible: - заставляет сообщение журнала больше не отображаться.
{
...
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
Надеюсь, это поможет.
Я столкнулся с этим в iPad-приложении, ориентированном на iOS 5.1 в Xcode 4.5.1. Приложение использует UITabBarController. Мне нужен новый раздел в контроллере панели вкладок, поэтому я создал новый контроллер представления и xib. Как только я добавил новый контроллер представления в контроллер панели вкладок, ни один из моих экранных элементов управления больше не работал, и я получил журнал ожиданий с журналом контроллера корневого каталога.
Как-то объект верхнего уровня в новом xib был UIWindow вместо UIView. Когда я сбросил UIView в XIB, у него была точка вывода точки обзора, переместила все подзоны в новый UIView и удалила экземпляр UIWindow, проблема была исправлена.
Хотя многие из этих ответов кажутся действительными, ни один из них не зафиксировал сообщение для меня. Я экспериментировал с пустым шаблоном приложения и пытался загрузить прямо в файл .xib для понимания (например, для шаблона старого окна). Кажется, что Apple оставила сообщение NSLog.
Я был на Xcode 4.3, и ничто, казалось, не избавилось от сообщения, и я хотел знать, почему. Наконец, я решил посмотреть, что произойдет в Xcode 4.5 (предварительный просмотр/сборка iPhone 6.0), и сообщение больше не существует. Двигаемся дальше.
Эта ошибка поразила меня внезапно. Итак, что вызвало это?
Оказывается, я был в IB, прикреплял File Owner к новому маленькому ImageView, который я бы перетащил в View. Я не назвал его IBOutlet в файле .h, поэтому, когда я перетащил ctrl-мышью, новый образ не был указан как возможное соединение. Единственной возможностью, отображаемой в маленьком черном ящике, была View. Я должен был случайно щелкнуть. Я сделал несколько изменений, затем запустил программу и получил ошибку корневого контроллера. Исправление связано с повторным подключением владельца файла к нижнему виду на экране xib-IB.
Убедитесь, что ваш "Начальный контроллер просмотра" установлен правильно для вашей первой сцены.
Что вызывает ошибку.
Звучит как self.tabBarController
возвращает nil
. tabBarController
, вероятно, не подключен в Interface Builder. Установите IBOutlet
of tabBarController
в tabBarController
в построителе интерфейсов.
Это решение Swift 2 работало для меня:
Вставьте код ниже в AppDelegate → didFinishLaunchingWithOptions
self.window!.rootViewController = storyboard.instantiateViewControllerWithIdentifier("YourRootViewController") as? YourRootViewControllerClass
Перемещение setRootViewController:
от didFinishLaunchingWithOptions:
до awakeFromNib:
разрешило это в моем пустом проекте.
awakeFromNib
чего именно? : /
В моем случае все о фактическом окне и методе didFinishLaunchingWithOptions:
было в порядке.
Моя ошибка заключалась в том, что я не понимал, что applicationDidBecomeActive:
запускается при запуске в дополнение к тому, когда приложение выходит на передний план после того, как было в фоновом режиме.
Поэтому в applicationDidBecomeActive:
я манипулировал контроллерами представлений, которые еще не закончили все их настройки (ожидая ответа на разные потоки и т.д.).
Как только я переместил эту функцию за пределы applicationDidBecomeActive
, ошибки исчезли.
Ни один из ответов не устранил мою проблему.
Я работаю над старым проектом iOS4, обновленным до ARC, и теперь он работает в Xcode 5 для iOS 7
Я прочитал все их и начал проверять мою конфигурацию и код.
Для меня было установлено
-(BOOL) application:(UIApplication*) application didFinishLaunchingWithOptions: (NSDictionary*) launchOptions
{
// Maybe do something
return YES;
}
В дополнение к наличию
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
}
У меня не было
-(BOOL) application:(UIApplication*) application didFinishLaunchingWithOptions: (NSDictionary*) launchOptions
до получения ошибки.
Ни один из вышеперечисленных не работал у меня... обнаружил что-то не так с моим методом init на моем приложении appDelegate. Если вы реализуете метод init, убедитесь, что вы сделали это правильно
У меня было это:
- (id)init {
if (!self) {
self = [super init];
sharedInstance = self;
}
return sharedInstance;
}
и изменил его на следующее:
- (id)init {
if (!self) {
self = [super init];
}
sharedInstance = self;
return sharedInstance;
}
где "sharedInstance" - это указатель на мой appDelegate singleton
Я перенесла старый образец образца EAGLView в новый образец образца GLKView в Xcode 4, и ни один из решений не работал у меня. Наконец, я понял, что пытался установить основной GLKViewController self.view, чтобы указать на вложенный GLKView в Interface Builder.
Когда я указал self.view обратно в корень GLKView в Interface Builder, мое приложение затем могло запускаться без сообщения об ошибке (поэтому убедитесь, что вид вашего контроллера представления установлен в корневом представлении).
P.S. если вы хотите, чтобы вложенный GLKView работал, создайте новую переменную-член, например self.glkSubview в ViewController.h, и перетащите ее соединение с вложенным GLKView в Interface Builder. Затем обязательно перетащите делегат self.glkSubview в File Owner. Вы должны вручную вызвать [self.glkSubview display] в "- (void) glkView: (GLKView *) view drawInRect: (CGRect) rect", если у вас установлено значениеNeedsDisplay для GLKView.
У меня было такое же сообщение об ошибке, потому что я вызывал предупреждение в
- (void)applicationDidBecomeActive:(UIApplication *)application
вместо
- (void)applicationWillEnterForeground:(UIApplication *)application
для изменения ARC:
измените на
@synthesize window;
вместо
@synthesize window=_window;
Вы пытались установить делегат, т.е.
self.rootController.delegate = self;
внутри applicationDidFinishLaunchingWithOptions? Это сработало для меня, хотя я не уверен, почему.
У меня также была эта проблема. Оказывается, когда я удалил делегата приложения из списка объектов слева, я удалил соединение для App Delegate, Window и TabBarController:)
Подтвердите свой файл STORYBOARD... Если вы используете IB для "подключения" кода к вашему пользовательскому интерфейсу.. и просто удалите элемент пользовательского интерфейса... и затем поймите, о, вам нужно удалить ссылку в коде (в моем случае UIButton называется AbortButton)... затем через несколько секунд приложение не запустится...
Проблема находится в файле "раскадровки". Откройте его в редакторе xml и посмотрите на сиротские "отношения", разъемы, которые указывают места, где они не должны...
например:
< отношения > < отношение вид = "выход" name= "AbortButton" кандидатclass= "UIButton" / >
больше не существовало в моем коде... (но у меня все еще был "соединитель", связанный в файле раскадровки).
Также у меня был (как-то и недействительный коннектор из UIImageView или ToolBar на мой основной объект UIViewController.view)... не думаю, что ему понравилось, что...
нижняя строка - не нужно вручную вводить код контроллера обратно... файл STORYBOARD взломан. Я исправил мой, и бинго снова отлично поработало.
и BTW, как текстовый кодировщик. Я очень люблю IB... пинает над MS Visual Studio IDE...