Я получаю следующую ошибку в моей консоли:
Ожидается, что приложения будут иметь контроллер корневого представления в конце запуска приложения
Ниже мой 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's current view as a subview of the window
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
В Интерфейсном Разработчике UITabBarController
делегат подключен к Делегату приложения.
Кто-нибудь знает, как решить эту проблему?
ios
objective-c
АртСабинцев
источник
источник
Ответы:
У меня была такая же проблема. Проверьте свой main.m. Последний аргумент должен быть установлен на имя класса, который реализует протокол UIApplicationDelegate.
источник
NSStringFromClass
. Вот как Xcode теперь создает файл main.m. Например:#import "AppDelegate.h
а потомint retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
self.window
инициализирован какself.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
Заменить в AppDelegate
в
источник
addSubview
Линия была частью шаблона проекта на ранней версии Xcode / IOS SDK. Если приложение вернулось в прошлое, оно может быть у вас, даже если вы его не написали.У меня была такая же ошибка при попытке изменить первый контроллер представления, который был загружен в
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Сначала я не знал, откуда именно возникла ошибка, поэтому я сузил ее и выяснил, что пошло не так. Оказывается, я пытался изменить отображение представления, прежде чем оно действительно появилось на экране. Поэтому решение было перенести этот код в viewcontroller, который доставлял мне проблемы
- (void)viewDidLoad
в
- (void)viewDidAppear:(BOOL)animated
и ошибка перестала появляться. Моя проблема была вызвана
UIAlertView
шоу.В вашем случае я предлагаю вам проверить код в активном контроллере представления tabBarController (так как это, вероятно, проблема в этом контроллере представления). Если это не сработает, попробуйте установить начальные настройки в файле nib, а не в коде - или, если вы хотите сделать это в коде, попробуйте переместить код в соответствующий метод активного viewcontroller tabBarController.
Удачи!
источник
viewDidLoad:
(без добавления флага), и я не должен этого делать. Независимо, спасибо за предложение!viewDidLoad
для многих вещей, настраивая все новички, такие как добавление данных вUITableView
. Я не могу переместить это,viewDidAppear:
потому что я только хочу, чтобы это выстрелило один раз.Я получил это, когда начал с шаблона «Пустое приложение», а затем вручную добавил XIB. Я решил это, установив основное имя пера, как предложено Санни. Недостающим шагом в этом сценарии является удаление
от
Как это будет перезаписать экземпляр вашего окна, созданного в файле Xib. Это предполагает, что вы создали ViewController и связали его с окном и делегатом приложения в файле XIB.
источник
Это случилось со мной. Решено редактированием .plist файла. Укажите основное имя файла основного пера (должно быть MainWindow.xib). Надеюсь, это поможет.
источник
Я столкнулся с той же проблемой недавно, когда строю проект с ios5 sdk. Сначала он собирался и работал правильно, но после этого появилась ошибка.
В моем случае решение было довольно простым.
Чего не хватало, так это того, что свойство Main Interface на вкладке сводки цели моего приложения было стерто. Поэтому мне нужно было установить его снова.
Если это не главное, и если tabBarController все еще равен нулю, вы всегда можете программно создать окно и корневой контроллер. В качестве запасного варианта я добавил следующий код в свой проект
Это будет работать, только если будет реализовано решение sho.
источник
Я обновился до iOS9 и начал получать эту ошибку из ниоткуда. Я смог это исправить, но добавив приведенный ниже код
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
источник
Ни одно из вышеперечисленных предложений не решило мою проблему. Мое было это:
Добавить:
после:
в моем приложении
источник
источник
makeKeyAndVisible
это не решает проблему. ТОЛЬКО это решило предупреждение для меня. БЛАГОДАРЮ ВАС!Storyboard
такжекак добавить RootViewController для iOS5
если ваше приложение до сих пор не использовало RootViewController, просто создайте его;), нажав «Файл»> «Создать»> «Новый файл»; выберите
UIViewController subclass
имя RootViewController , снимите флажок С XIB для пользовательского интерфейса (если он у вас уже есть) и поместите этот код в свой AppDelegate :: didFinishLaunchingWithOptionsнаверняка - вам нужно импортировать RootViewController.h и создать переменную
вот хорошая статья о RootViewController и AppDelegate,
источник
У меня также была эта ошибка, но в отличие от любого из ранее перечисленных ответов мой был, потому что я раскомментировал метод loadView в моем недавно сгенерированном контроллере (xcode 4.2, ios5).
Он даже сказал мне, что метод был для создания представления программно, но я пропустил его, потому что он выглядел настолько похожим на другие методы, как viewDidLoad, что я обычно использую, я не уловил его.
Чтобы решить эту проблему, просто удалите этот метод, если вы не создаете программно иерархию представлений, используя перо или раскадровку.
источник
У меня тоже есть эти проблемы. я запустил свой проект в xcode4.2.1. Я прочитал все комментарии там, но никто не крут для меня. Через некоторое время я обнаружил, что прокомментировал кусок кода.
тогда я раскомментировал это. у меня все нормально. надеюсь, это будет полезно для вас, ребята.
источник
Убедитесь, что у вас есть эта функция в вашем делегате приложения.
Убедитесь, что didFinishLaunchingWithOptions возвращает YES. Если вы удалили строку «return YES», это приведет к ошибке. Эта ошибка может быть особенно распространена среди пользователей раскадровки.
источник
С моим первым просмотром
MenuViewController
я добавил:по методу делегата приложения:
Это сработало.
источник
В iOS 5.0 или около того произошли небольшие изменения, требующие наличия контроллера корневого представления. Если ваш код основан на более раннем образце кода, таком как GLES2Sample , то в этих примерах кода не был создан контроллер корневого представления.
Чтобы исправить (например, GLES2Sample),
applicationDidFinishLaunching
я сразу создаю контроллер корневого представления и присоединяю к нему свой glView.Это убирает предупреждение и не влияет на ваше приложение в противном случае.
источник
Попробуйте подключить IBOutlet контроллера панели вкладок к корневому представлению в Интерфейсном Разработчике вместо
Но на самом деле я не видел такой ошибки раньше.
источник
Я решил проблему, выполнив следующее (ни одно из перечисленных выше решений не помогло):
В раскрывающемся меню, связанном с «Основным интерфейсом», выберите другую запись, затем снова выберите «Главное окно» и перестройте.
источник
Я столкнулся с той же проблемой, но я использовал
storyboard
Назначение моего
storyboard
InitialViewController
окнаrootViewController
.В
и это решило проблему.
источник
У меня возникла та же проблема сразу после обновления до Xcode 4.3 и только при запуске проекта с нуля (то есть создать пустой проект, затем создать UIViewController, а затем создать отдельный файл пера).
После помещения ВСЕХ строк, которые я использовал, и обеспечения правильных соединений, я продолжал получать эту ошибку, и файл пера, который я пытался загрузить через контроллер представления (который был установлен как rootController), никогда не показывался в симуляторе.
Я создал один шаблон представления через XCode и сравнил его с моим кодом, и, наконец, нашел проблему!
Xcode 4.3, кажется, добавляет по умолчанию метод - (void) loadView; в разделе реализации контроллера представления. Внимательно прочитав комментарии, стало понятно, в чем проблема. Комментарий указывает на переопределение метода loadView, если создается представление программно (и я перефразирую), иначе НЕ для переопределения loadView, если используется перо. В этом методе больше ничего не было, так что в действительности я переопределил метод (и ничего не делал), пока использовал nib-файл, который дал ошибку.
РЕШЕНИЕ состояло в том, чтобы либо полностью удалить метод loadView из раздела реализации, либо вызвать родительский метод, добавив [super loadView].
Было бы лучше удалить его, если использовать файл NIB, так как добавление любого другого кода в действительности переопределит его.
источник
У меня было такое же сообщение об ошибке в журнале. У меня было UIAlertView всплывающее в приложении: didFinishLaunchingWithOptions. Я решил эту проблему, отложив вызов функции alertView, чтобы дать время корневому контроллеру представления завершить загрузку.
В приложении: didFinishLaunchingWithOptions:
который звонит через 1 секунду:
источник
У меня такая же проблема. Если вы создаете оконное приложение «с нуля», как я, вам нужно сделать следующее: (обратите внимание, это шаги для Xcode 4.2.)
0. Убедитесь, что ваш делегат приложения соответствует протоколу UIApplicationDelegate.
Например, предположим, что наш делегат называется MyAppDelegate. В MyAppDelegate.h у нас должно быть что-то вроде этого:
1. Укажите делегата приложения в main.m
Например,
2. Создайте файл интерфейса главного окна.
Для этого щелкните правой кнопкой мыши свой проект и выберите «Новый файл». Оттуда выберите Окно из раздела iOS -> Пользовательский интерфейс.
После добавления файла в проект перейдите к сводке проекта (щелкните левой кнопкой мыши по проекту; щелкните «Сводка».) В разделе «Информация о развертывании iPhone / iPod» (и, если хотите, в соответствующем разделе iPad) и выберите новый файл интерфейса в разделе «». Основной интерфейс »комбинированное окно.
3. Подключите все это в редакторе интерфейса
Выберите файл интерфейса в списке файлов, чтобы вызвать редактор интерфейса.
Убедитесь, что панель Utilities открыта.
Добавьте новый объект, перетащив объект из списка объектов на панели «Утилиты» в пространство над под вашим объектом Window. Выберите объект. Нажмите на инспектора идентификации на панели утилит. Измените класс на делегат приложения (в данном примере MyAppDelegate.)
Откройте инспектор соединений для MyAppDelegate. Подключите выход окна к окну, которое уже существует в файле интерфейса.
Щелкните «Владелец файла» слева, а затем нажмите «Инспектор удостоверений» на панели «Утилиты». Изменить класс на
UIApplication
Откройте инспектор соединений для владельца файла. Подключите выход делегата к объекту MyAppDelegate.
4. И наконец, что очень важно, нажмите на объект Window в файле интерфейса. Откройте инспектор Атрибутов. Убедитесь, что «Видимый при запуске» отмечен.
Это все, что я должен был сделать, чтобы это сработало для меня. Удачи!
источник
Если вы используете MTStatusBarOverlay, то вы получите эту ошибку.
MTStatusBarOverlay создает дополнительное окно ([[UIApplication sharedApplication] windows), которое не имеет корневого контроллера.
Это, кажется, не вызывает проблемы.
источник
Получил ту же ошибку после замены моего пользовательского интерфейса на раскадровку, используя XCode 4.6.3 и iOS 6.1
Решил это, очистив весь код из didFinishLaucnhingWithOptions в AppDelegate
источник
ОрдоДей дал правильный и ценный ответ. Я добавляю этот ответ только для того, чтобы привести пример
didFinishLaunchingWithOptions
метода, который использует его ответ, а также учет комментариев других пользователей относительно контроллера навигации.источник
Это произошло для меня, потому что я случайно прокомментировал:
от
источник
Я был в состоянии установить начальный контроллер представления на итоговом экране xcode.
Нажмите на название самого верхнего проекта в левом файловом проводнике (у него должен быть маленький значок чертежа). В центральной колонке нажмите на название вашего проекта в разделе «ЦЕЛИ» (рядом с ним должен быть маленький значок «А»). Посмотрите в разделе «Информация о развертывании iPhone / iPod» и найдите «Основной интерфейс». Вы должны быть в состоянии выбрать опцию из выпадающего списка.
источник
Поверх ответа «шо», это правильно (четвертый параметр UIApplicationMain должен быть именем основного контроллера), я добавляю несколько комментариев.
Недавно я изменил «модель» моего приложения с использования MainWindow.xib для программного конструирования окна. Приложение использовало старый шаблон, который автоматически создавал это MainWindow. Так как я хотел поддерживать другое представление контроллера XIB для iPhone 5, проще создать правильный XIB программно при создании App Delegate. Я также удалил MainWindow.xib из проекта.
Проблема была в том, что я забыл заполнить четвертый параметр в основном приложении UIApplication и забыл удалить главное окно из «Основного интерфейса» в «Сводке проекта».
Это вызвало ОГРОМНУЮ проблему: оно вынесло безобидное предупреждение «Ожидается, что приложения…» на устройствах разработки, но когда оно зашло в App Store, оно сломалось на потребительских телефонах, аварийно завершив работу, потому что MainWindow больше не было в комплекте! Мне пришлось запросить ускоренный обзор для исправления.
Другим симптомом является то, что иногда белый блок, например пустой UIView, иногда появлялся, когда настройки были изменены и приложение было помещено на передний план. В iPhone 5 было ясно, что это блок 320x480. Возможно, отсутствующее MainWindow создавалось в режиме разработки, используя старый размер. Я только что обнаружил эту ошибку, когда первые сообщения о сбое достигли папки «Входящие».
Установка приложения из App Store, а не из XCode показала, что приложение действительно зависло, и проблема MainWindow проявилась в журнале, поэтому я мог видеть, что это не было какой-то особой комбинацией устройств + версий IOS.
источник
Чтобы добавить ответ Майка Флинна, после обновления до Xcode 7 и запуска моего приложения на устройстве iOS 9 я добавил это в свой
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
источник
Эта проблема возникает, если у вас неправильно настроен Interface Builder.
Убедитесь, что окно вашего делегата приложения и выходы viewController подключены:
В вашем MainWindow.xib удерживайте элемент управления, щелкните «Делегировать приложение» и перетащите его на объект «Окно». Выберите окно. Удерживая кнопку управления, снова выберите делегат приложения, перетащите его в корневой контроллер представления и выберите viewController.
источник
Эта ошибка также появляется, когда владелец файла MainWindow.xib установлен неправильно.
Владелец файла - UIApplication
-> вставленный объект класса делегата приложения с выходом окна, подключенным к окну.
источник