Почему отображение UIAlertView в приложении: didFinishLaunchingWithOptions: вызывает ошибку? - PullRequest
2 голосов
/ 28 января 2012

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

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

Почему это происходит? Как показать предупреждение при запуске без получения этой ошибки?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Check the user preferences for document storage options
    if (![UserPreferencesHelper userDocumentStoragePreferencesHaveBeenCreated])
    {
        // User preferences have not been set, prompt the user to choose either iCloud or Local data storage
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Use iCloud?" 
                                                        message:@"Would you like to store data in iCloud?" 
                                                       delegate:self 
                                              cancelButtonTitle:nil 
                                              otherButtonTitles:@"No", @"Yes", nil];
        [alert show];
    }
}

** ОБНОВЛЕНИЕ **

Следует отметить, что я использую iOS 5 с раскадровками. Корневой контроллер вида установлен в раскадровке.

Ответы [ 3 ]

7 голосов
/ 28 января 2012

Попробуйте заменить [alert show] на:

[alert performSelector:@selector(show) withObject:nil afterDelay:0.0];

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

2 голосов
/ 28 января 2012

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

0 голосов
/ 28 января 2012

Прежде чем ваше приложение завершит работу с didFinishLaunchingWithOptions: ему нужно установить rootViewController. Вы можете установить это свойство для ViewController с именем viewController с помощью:

    self.window.rootViewController = self.viewController;

Обратите внимание, что установка контроллера в качестве rootViewController автоматически добавляет представление. Таким образом, вам не нужно снова добавлять представление с помощью:

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