приложения должны иметь консоль контроллера корневого представления - PullRequest
10 голосов
/ 19 ноября 2011

Я получаю сообщение в консоли, когда я запускаю свое приложение, которое говорит:

2011-11-16 19: 17: 41.292 Сок [8674: 707] Ожидается, что приложения будут иметь контроллер корневого представления в конце запуска приложения

Я слышал от других, что это связано с методом didFinishLaunchingWithOptions

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

Мой код для метода:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];

    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];

    return YES;
}

Ответы [ 15 ]

54 голосов
/ 19 ноября 2011

Вам следует заменить

[window addSubview:tabBarController.view];

на

[self.window setRootViewController:tabBarController];

Возможно, вы построили свой проект на ' Пустое приложение ' и забыли установить rootViewControllerв вашем didFinishLaunchingWithOptions (который существует в вашем AppDelegate.m ).

Однако, если вы строите свой проект с помощью Single View Application или другого типа, проект по умолчанию установит rootViewController через xib (который может быть MainWindow.xib в вашем проекте).

13 голосов
/ 15 декабря 2011

У меня была такая же проблема на iOS 5 после добавления раскадровки в «пустой» проект.Оказывается, мне пришлось удалить все строки в AppDelegate.m, которые устанавливают значения self.window.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    //self.window.backgroundColor = [UIColor whiteColor];
    //[self.window makeKeyAndVisible];
    return YES;
}
6 голосов
/ 01 декабря 2011

Если у вас есть MainWindow.xib, убедитесь, что вы установили Main Interface в сводке Target на MainWindow.

4 голосов
/ 29 ноября 2011

Я получил эту ошибку Applications are expected to have a root view controller at the end of application launch, чтобы убедиться, что метод loadView в моем контроллере корневого представления вызывает [super loadView].Надеюсь, это кому-нибудь поможет.

3 голосов
/ 19 ноября 2011

Попробуйте использовать self.window вместо window (если в вашей настройке window означает synthesized с чем-то вроде @synthesize window=_window;):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

    [self.window addSubview:tabBarController.view];
    [self.window makeKeyAndVisible];

    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];

    return YES;
}

2-я возможность:

В вашем main.m убедитесь, что последний аргумент - это имя делегата приложения.В вашем случае это выглядит так:

retVal = UIApplicationMain(argc, argv, nil, @"JuiceAppDelegate");

Решение:

Как сказал @ marcus13 в комментариях ниже. Это было исправлено в ответе SO: Ожидается, что приложения будут иметь контроллер корневого представления в конце запуска приложения - путем перемещения методов UIAlertView с -(void)viewDidLoad на -(void)viewDidAppear:(BOOL)animated

2 голосов
/ 30 сентября 2012

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

При этом вы должны убедиться в 3 основных вещах:

Всегдавыберите ваш начальный контроллер (TabBarcontroller или NavigationController) в качестве начального представления в раскадровке.

Измените код в вашем Appdelegate.m с этого

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

к этому

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    return YES;
}

Проверьте файл [ProjectName] -Info.plist.Если нет ключа с именем «Основное имя файла раскадровки», вы должны вручную добавить его и установить в качестве его значения имя вашего файла раскадровки (без расширения).

После того, как я все сделализ этих шагов мое приложение работало отлично.

2 голосов
/ 19 февраля 2012

Другая причина:

Я был в IB, прикрепляя Владелец файла к новому маленькому ImageView, который я перетащил в View. Я не назвал его IBOutlet в файле .h, поэтому, когда я его перетянул, Ctrl не отобразил новое изображение как возможное соединение. Единственная возможность, отображаемая в маленьком чёрном ящике, была Просмотр. Должно быть, я случайно нажал. Я сделал несколько изменений, затем запустил программу и получил ошибку Root Controller. Исправление было связано с повторным подключением владельца файла к нижнему представлению на экране xib-IB.

1 голос
/ 21 января 2013

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

[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]

У меня была такая же ошибка, пока я не удалил вышеуказанную строку.Надеюсь, это поможет!

РЕДАКТИРОВАТЬ: выполнение вышеуказанного теперь вызывает мой метод viewControllers viewDidAppear дважды?

1 голос
/ 06 декабря 2012

У меня была такая же проблема с моим приложением.Он появился, когда я добавил другой контроллер представления в свой проект и попытался установить его в качестве корневого контроллера представления в AppDelegate.Я пробовал несколько решений, но ни одно из них не могло решить проблему.Наконец, я нашел причину: у меня было две локализованные версии файла MainWindow.xib (одна для немецкой и другая для английской локализации).Поэтому я удалил английский файл и снова подключил IBOutlets в MainView.xib.Это решило проблему.

1 голос
/ 22 августа 2012

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

Это потому, что я создал UIAlertView в didFinishLaunchingWithOptions.

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

Приложение не падает, я просто получаю эту зарегистрированную ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...