2012-06-13 36 views
11

Używam NSUbiquitousKeyValueStore do synchronizowania niektórych danych preferencji z usługą iCloud. Zauważyłem, że jeśli użytkownik wyłączy element "Document & Data" w iCloud w "Setting App", NSUbiquitousKeyValueStore nie może zsynchronizować swoich danych z iCloud. Tak, chcę najpierw sprawdzić, czy ta opcja jest włączona on.After googlowania, Znalazłem ten fragment kodu:Jak programowo wykryć, czy usługa iCloud jest włączona na urządzeniu użytkownika, gdy używa się tylko NSUbiquitousKeyValueStore?

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; 

    } 

Co chcę wiedzieć, czy jest to jedyny sposób, aby wykryć, nawet jeśli po prostu użyć NSUbiquitousKeyValueStore (nie przechowywania dokumentów iCloud). Czy istnieje lepsza alternatywa?

Odpowiedz

12

Zasadniczo, NSUbiquitousKeyValueStore jest zawsze dostępny, nawet jeśli użytkownik nie ma konta iCloud (w tym przypadku, NSUbiquitousKeyValueStore to tylko zwykła pamięć lokalna). Zasadniczo nie musisz pytać siebie ani użytkownika, czy istnieje skonfigurowane konto iCloud.

Jeśli naprawdę chcesz wiedzieć na pewno, w iOS 5 jedynym rozwiązaniem jest to, o którym wspomniałeś.

+0

Twoja odpowiedź wydaje się być w konflikcie z dokumentami, które mówią: "Unikaj używania tej klasy do przechowywania danych, które są istotne dla zachowania aplikacji w trybie offline [...]". Już napisałem o tym [pytanie] (http://stackoverflow.com/q/23662856/251760). Czy byłbyś w stanie na to odpowiedzieć? – Jonathan

+0

Oznacza to, że nie należy polegać na tym sklepie, który jest lokalną prawdą, ale raczej prostym kanałem komunikacji synchronizacji między urządzeniami. – Julien

+0

Dzięki! Zrobiłem twoją odpowiedź w [odpowiedź] (http://stackoverflow.com/a/26556553/251760) na moje pytanie, mam nadzieję, że ci to odpowiada. (Jeśli wolisz sam odpowiedzieć, z chęcią usunąłbym moje.) – Jonathan

3

Nie wiem, czy dokumentacja zostały zaktualizowane, ale Apple jest teraz mówiąc:

Aby ustalić, czy iCloud jest dostępny, szczególnie w momencie premiery, sprawdź wartość nieruchomości ubiquityIdentityToken zamiast

Zobacz NSFileManager dla obu ubiquityIdentityToken i URLForUbiquityContainerIdentifier.

Należy również zauważyć, że Apple twierdzi, że URLForUbiquityContainerIdentifier może być względnie powolny, a sprawdzenie ubiquityIdentityToken jest stosunkowo szybkie.

Jest to na iOS6 i nowszy.

+1

To prawda, jeśli używasz dokumentów iCloud, pytanie dotyczy przechowywania klucz-wartość iCloud. –

+0

Hmmm. Czy nie dostaję czegoś? Dokumenty dla ubikwityIdentityToken nie sugerują, że jest to specyficzne dla Dokumentów iCloud: "Kiedy usługa iCloud jest obecnie dostępna, ta właściwość [tj. UbiquityIdentityToken] zawiera nieprzezroczysty obiekt reprezentujący tożsamość bieżącego użytkownika. Jeśli usługa iCloud jest niedostępna z jakiegokolwiek powodu lub istnieje nie jest zalogowanym użytkownikiem, wartość tej właściwości wynosi zero. " –

+1

Jak powiedział Julien, pamięć klucz-wartość jest zawsze dostępna (nawet jeśli "ubiquityIdentityToken" jest zerowe). Chcemy sprawdzić, czy użytkownik wyłączył Ustawienia> iCloud> Dokument i dane. –