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

я используюNSUbiquitousKeyValueStore синхронизировать некоторые данные о предпочтениях с iCloud. Я обнаружил, что если пользователь отключил & quot; Документ & amp; Данные & Quot; элемент iCloud в разделе «Настройка приложения»,NSUbiquitousKeyValueStore не может синхронизировать свои данные с iCloud. Итак, я хочу сначала проверить, включена ли эта настройка. Я нашел этот фрагмент кода & # xFF1A;

    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). Есть ли лучшая альтернатива?

Ответы на вопрос(2)

Решение Вопроса

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

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

 24 окт. 2014 г., 18:33
Ваш ответ противоречит документам: «Не используйте этот класс для данных, которые важны для поведения вашего приложения в автономном режиме [& # x2026;] & # x201D ;. Я уже разместилquestion об этом. Вы могли бы ответить на это?
 24 окт. 2014 г., 23:30
Спасибо! Я превратил твой ответ вanswer на мой вопрос, я надеюсь, что вы согласны с этим. (Если вы сами сделаете ответ, я с удовольствием удалю свой.)
 24 окт. 2014 г., 22:23
Это означает, что вы не должны полагаться на то, что этот магазин - ваша локальная правда, а скорее простой канал связи для синхронизации между вашими устройствами.

To determine if iCloud is available, especially at launch time, check the value of the ubiquityIdentityToken property instead

УвидетьNSFileManager для обоихubiquityIdentityToken а такжеURLForUbiquityContainerIdentifier.

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

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

 01 нояб. 2014 г., 16:45
Это верно, если вы используете iCloud Documents, вопрос касается хранения значения ключа iCloud.
 02 нояб. 2014 г., 18:43
Как сказал Жюльен, хранилище ключ-значение всегда доступно (даже когдаubiquityIdentityToken это ноль). Мы хотим проверить, отключил ли пользователь Настройки & gt; iCloud & gt; Документ & amp; Данные.
 01 нояб. 2014 г., 20:15
Хммм. Я что-то не понимаю? Документы для ubiquityIdentityToken не предполагают, что он специфичен для документов iCloud: «Когда iCloud в настоящее время доступен, это свойство [то есть ubiquityIdentityToken] содержит непрозрачный объект, представляющий личность текущего пользователя. Если по какой-либо причине iCloud недоступен или пользователь не вошел в систему, значение этого свойства равно nil. & Quot;

Ваш ответ на вопрос