2012-02-02 3 views
0

Мое приложение представляет собой modal view controller (форма ввода пароля) всякий раз, когда приложение запускается. Я представить контроллер представления в методах делегата два приложения:Почему контроллер модального представления не отображается в applicationDidFinishLaunchingWithOptions?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [self.window.rootViewController presentModalViewController:self.passcodeViewController animated:NO]; 
    //... 
    return YES; 
} 

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    if (!self.passcodeViewController.view.window) { 
     [self.window.rootViewController presentModalViewController:self.passcodeViewController animated:NO]; 
    } 
} 

Вызов представить модальный контроллер представления в application:didFinishLaunchingWithOptions: метод не представляет контроллер представления, где, как вызов в applicationDidBecomeActive: делает. Почему это?

EDIT: Я хотел бы упомянуть, в комментариях ниже, что я с помощью раскадровки и self.window.rootViewController действительно указывают на объект (в основном, это не ноль)

+0

Как rootViewController получает назначение на окно? MainWindow.xib? Раскадровка? Я предполагаю, что либо self.window, либо self.window.rootViewController еще не назначено в файле didFinishLaunchingWithOptions. – jsd

+0

раскадровка - я забыл упомянуть, что self.window.rootViewController указывает на контроллер вида, т. Е. это не nil –

ответ

0

С UIApplicationDelegate протокол Справочное руководство:

Она вызывается после ваше приложение было запущено и его главный СИБ файл был загружен. В момент вызова этого метода приложение находится в неактивном состоянии.

+0

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

+0

Хм, так что проблема не в том, что метод не вызывается, когда вы хотите? Я полагаю, вы попробовали добавить инструкцию 'NSLog', чтобы точно видеть, когда она вызывается. Причина, по которой представление не будет представлено, заключается в том, что либо NavigationController не является текущим ответчиком, либо, возможно, он представлен, но на другом уровне или иерархическом уровне представлений. –