Сообщение "Ожидается, что окна приложений будут иметь контроллер корневого представления" при добавлении представления сразу после запуска, только для iOS 9

Мое приложение отправляет запрос при запуске и отображает краткое сообщение для пользователей, когда оно успешно, с помощью MTStatusBarOverlay, К сожалению, моя текущая реализация, похоже, противоречит парадигмам представления жизненного цикла iOS 9. Я получаю сообщение

Ожидается, что окна приложений будут иметь контроллер корневого представления в конце запуска приложения.

и приложение вылетает. Приложение отлично работает на iOS 7 и 8.

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

Вот выдержка из UIApplicationDelegate реализация:

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

    self.window.rootViewController = [[MyViewController alloc] init];

    [...]
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [MyDataManager sendRequestWithCompletion:^{
        // Displays a message with MTStatusBarOverlay
        [self showSuccessOverlay];
    }];
}

application:didFinishLaunchingWithOptions: называется раньше applicationDidBecomeActive: так что, похоже, никогда не должно быть проблем с rootViewController устанавливается

Почему это происходит? Чем отличается iOS 9 от приложения?

1 ответ

Решение

MTStatusBarOverlay это подкласс UIWindowТаким образом, создание экземпляра во время запуска приложения добавляет, что UIWindow в список, который iOS проверяет на заполненность rootViewController когда запуск завершится.

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

[MTStatusBarOverlay sharedInstance].rootViewController = [UIViewController new];
[[MTStatusBarOverlay sharedInstance] postMessage:@"Message"];
Другие вопросы по тегам