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

Използвам NSUbiquitousKeyValueStore за синхронизиране на някои данни за предпочитанията към iCloud. Открих, че ако потребителят деактивира елемента „Документ и данни“ на iCloud в „Приложение за настройка“, NSUbiquitousKeyValueStore не може да синхронизира данните си с iCloud. И така, искам първо да проверя дали тази настройка е включена. Намерих този кодов фрагмент:

    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). Има ли по-добра алтернатива?


person Jagie    schedule 13.06.2012    source източник


Отговори (2)


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

Ако наистина искате да знаете със сигурност, в iOS 5 единственото решение е това, което споменавате.

person Julien    schedule 24.06.2012
comment
Вашият отговор изглежда противоречи на документите, които казват: „Избягвайте да използвате този клас за данни, които са от съществено значение за поведението на приложението ви, когато сте офлайн […]“. Вече публикувах въпрос за това. Бихте ли могли да отговорите на това? - person Jonathan; 24.10.2014
comment
Това означава, че не трябва да разчитате на този магазин да бъде вашата местна истина, а по-скоро на прост комуникационен канал за синхронизиране между вашите устройства. - person Julien; 25.10.2014
comment
Благодаря! Превърнах вашия отговор в отговор на моя въпрос, надявам се, че сте добре с това. (Ако предпочитате да отговорите сами, аз с удоволствие бих изтрил моя.) - person Jonathan; 25.10.2014

Не знам дали документите са актуализирани, но Apple сега казва:

За да определите дали iCloud е наличен, особено по време на стартиране, вместо това проверете стойността на свойството ubiquityIdentityToken

Вижте NSFileManager както за ubiquityIdentityToken, така и за URLForUbiquityContainerIdentifier.

Имайте предвид също, че Apple казва, че URLForUbiquityContainerIdentifier може да бъде сравнително бавно и че проверката на ubiquityIdentityToken е сравнително бързо.

Това е за iOS6 и по-нова версия.

person Chris Prince    schedule 30.10.2014
comment
Това е вярно, ако използвате iCloud Documents, въпросът е за хранилището на iCloud ключ-стойност. - person Axel Guilmin; 01.11.2014
comment
Хммм. Не получавам ли нещо? Документите за ubiquityIdentityToken не предполагат, че е специфичен за iCloud Documents: Когато iCloud е наличен в момента, това свойство [т.е. ubiquityIdentityToken] съдържа непрозрачен обект, представляващ самоличността на текущия потребител. Ако iCloud не е наличен по някаква причина или няма влязъл потребител, стойността на това свойство е нула. - person Chris Prince; 01.11.2014
comment
Както каза Жулиен, хранилището за ключ-стойност е винаги достъпно (дори когато ubiquityIdentityToken е нула). Искаме да проверим дали потребителят е деактивирал Настройки › iCloud › Документ и данни. - person Axel Guilmin; 02.11.2014