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

Я пишу приложение для iPhone с помощью Xcode 4.5 и iOS6. Я также создаю новый UIWindow, чтобы иметь возможность управлять областью строки состояния (для отображения там сообщений и т.д.). Я использую раскадровки, и мой метод appDelegate выглядит следующим образом:

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

Сообщение не появляется в консоли, когда я помещаю его в метод с именем viewDidAppear:

- (void)viewDidAppear:(BOOL)animated     {

    if (!window) {
        window = [[SGStatusBar alloc] initWithFrame:CGRectZero];
        window.frame = [[UIApplication sharedApplication] statusBarFrame];
        window.alpha = 0.5f;

        [self.view.window makeKeyAndVisible]; // has to be main window of app
        window.hidden = NO;
    }  
}

Тот же метод, помещенный в viewDidLoad, выдает предупреждение в консоли:

2012-12-27 11:34:20.838 NewApp[433:c07] Application windows are expected to have a root view controller at the end of application launch

Это потому, что я создал новый UIWindow? Почему разница между этими двумя методами настолько велика?

И, что самое главное, как я могу избавиться от этого предупреждения, поместив код в метод viewDidLoad?

EDIT:

Я столкнулся с той же проблемой здесь, но это не так, как я хотел бы ее решить (это на самом деле то, как я решаю это сейчас)

Я пробовал установить мой текущий ViewController в качестве моего контроллера корневого окна Windows, выполнив следующее:

ViewController *vcB = [[UIViewController alloc] init];
window.rootViewController = vcB;

Но я продолжаю получать предупреждение, в котором говорится:

Incompatible pointer types initializing 'ViewController *__strong' with an expression of type 'UIViewController *'

Ответ 1

Задайте свойство window.rootViewController.

Ответ 2

Добавьте следующий код в файлы delegate.h и delegate.m.

AppDelegate.h

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) YourViewController *viewController;

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewController = [[[YourViewcontroller alloc] initWithNibName:@"YourViewcontroller" bundle:nil] autorelease];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

Надеюсь, что это сработает.