Как программировать обнаружение, если iCloud включен на пользовательском устройстве, когда используется только NSUbiquitousKeyValueStore?

Я использую NSUbiquitousKeyValueStore для синхронизации некоторых данных предпочтений с iCloud. Я обнаружил, что если пользователь отключил элемент "Документ и данные" iCloud в "Настройка приложения", NSUbiquitousKeyValueStore не сможет синхронизировать свои данные с iCloud. Итак, я хочу сначала проверить, включен ли этот параметр. После googling я нашел этот фрагмент кода:

    NSURL *ubiq = [[NSFileManager defaultManager] 
                   URLForUbiquityContainerIdentifier:nil];
    NSLog(@"url=%@",ubiq);
    if (!ubiq) {
        UIAlertView *av = [[UIAlertView alloc] initWithTitle:nil message:@"Please enable iCloud in Setting app" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [av show];
        return;

    }

Я хочу знать, является ли это единственным способом обнаружения, даже если я просто использую NSUbiquitousKeyValueStore (а не хранилище документов iCloud). Есть ли лучшая альтернатива?

Ответ 1

В принципе, NSUbiquitousKeyValueStore всегда доступен, даже если у пользователя нет учетной записи iCloud (в этом случае NSUbiquitousKeyValueStore - это просто локальное хранилище). Поэтому в целом вам не нужно спрашивать себя или пользователя, есть ли настроенная учетная запись iCloud.

Если вы действительно хотите точно знать, что в iOS 5 единственное решение - это тот, который вы упоминаете.

Ответ 2

Я не знаю, обновлены ли документы, но Apple теперь говорит:

Чтобы определить, доступен ли iCloud, особенно во время запуска, проверьте значение свойства ubiquityIdentityToken вместо

Смотрите NSFileManager для ubiquityIdentityToken и URLForUbiquityContainerIdentifier.

Обратите также внимание на то, что Apple говорит, что URLForUbiquityContainerIdentifier может быть относительно медленным, а проверка ubiquityIdentityToken относительно быстрой.

Это для iOS6 и выше.