2014-09-04 2 views
1

каждый сейчас и потом, мое приложение запускается с черным экраном, а также следующее предупреждение:Root-контроллер спорадически отсутствует

Application windows are expected to have a root view controller at the end of application launch 

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

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

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

Это мой didFinishLaunchingWithOptions (который является единственным методом в приложение делегата, который имеет код в нем), как Мэтт просил:

- (BOOL)application:(UIApplication *)application 
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [DDLog addLogger:[DDASLLogger sharedInstance]]; 
    [DDLog addLogger:[DDTTYLogger sharedInstance]]; 
    [[DDTTYLogger sharedInstance] setColorsEnabled:YES]; 
    UIColor *pink = [UIColor colorWithRed:(118/255.0) 
            green:(214/255.0) 
            blue:(84/255.0) 
            alpha:1.0]; 
    [[DDTTYLogger sharedInstance] setForegroundColor:pink 
            backgroundColor:nil 
              forFlag:LOG_FLAG_INFO]; 

    #ifdef DEBUG 
     DDLogInfo(@"Launching in debug mode"); 
    #else 
     DDLogWarn(@"Launching in release mode"); 
    #endif 

    [AFNetworkActivityIndicatorManager sharedManager].enabled = YES; 
    [[AFNetworkActivityLogger sharedLogger] startLogging]; 

    [[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] 
     setFont:[UIFont fontWithName:@"OpenSans" size:14]]; 

    NSMutableDictionary *titleBarAttributes = [NSMutableDictionary 
     dictionaryWithDictionary: 
      [[UINavigationBar appearance] titleTextAttributes]]; 
    [titleBarAttributes setValue:[UIFont fontWithName:@"OpenSans" size:18] 
          forKey:NSFontAttributeName]; 
    [[UINavigationBar appearance] setTitleTextAttributes:titleBarAttributes]; 

    return YES; 
} 
+0

Что делает ваш App Делегат код выглядит? – matt

+0

Устранить столько, сколько вы можете, и проверить запуск еще. Я думаю, что вы слишком много делаете на старте, и это как-то заталкивает работы. Также зарегистрируйте контроллер корневого окна вашего окна. Предполагается, что у него есть один, и кажется, что он не получает ни одного, или он как-то настроен. – matt

+0

Спасибо, но я повредил все там, в другие части кода, и я все равно получаю сообщение об ошибке. –

ответ

0

Ничто в вашем приложении: didFinishLaunchingWithOptions выглядит, как он будет завинчивать корень view для окна. Является ли раскадровка установленной в Info.plist для ключа UIMainStoryboardFile? В раскадровке находится контроллер представлений, который должен быть контроллером корневого представления, установленным как он в инспекторе, должен быть установлен флажок «Исходный контроллер просмотра». Вы увидите серую стрелку, указывающую на контроллер корневого представления в раскадровке.

+0

Да на всех ваших вопросов. Как я уже сказал, эта ошибка возникает только время от времени, обычно она будет нормально работать. –

+0

Я согласен с этим ответом. Код, который вы опубликовали, не влияет на ваше окно, или это 'rootViewController'. Проверьте свой Info.plist и main.m, чтобы узнать, как создаются ваше окно и контроллер. – Rivera

1

Если вы используете раскадровки вы можете установить корневой контроллер представления из раскадровки enter image description here

В противном случае вы должны создать его программно в AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UINavigationController *rootViewController = [[UINavigationController alloc] initWithNibName:@"RootVC" bundle:nil]; 
    self.window.rootViewController = rootViewController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
Смежные вопросы