2011-10-19 6 views
14

Oto zdanie z Apple Docs: "Jeśli usługa iCloud nie jest skonfigurowana, zapytaj użytkowników, czy chcą ją skonfigurować (i najlepiej prześlij ją do Ustawień uruchamiania, jeśli chcą skonfigurować iCloud). "Jak sprawdzić, czy iCloud jest programowo programowany?

Jak mogę sprawdzić, czy iCloud jest skonfigurowany, czy nie i jak uruchomić ustawienia dla iCloud?

Odpowiedz

27

Edit:
Jeśli kierowania iOS6 lub powyżej można użyć [[NSFileManager defaultManager] ubiquityIdentityToken];. Aby zapoznać się z przykładem użycia, zapoznaj się z @Dj S' answer :).
Jest szybszy i łatwiejszy niż oryginalne rozwiązanie, które było przeznaczone dla osób kierowanych iOS5 a przede

Original Odpowiedź
Jak udokumentowano w iOS App programming guide - iCloud Storage. Że można sprawdzić prosząc URL pojemnik wszechobecność do menedżera plików :)

Dopóki podać poprawny identyfikator pojemnik wszechobecność poniżej metody powinny powrócić YES

- (BOOL) isICloudAvailable 
{ 
    // Make sure a correct Ubiquity Container Identifier is passed 
    NSURL *ubiquityURL = [[NSFileManager defaultManager] 
     URLForUbiquityContainerIdentifier:@"ABCDEFGHI0.com.acme.MyApp"]; 
    return ubiquityURL ? YES : NO; 
} 

jednak odkryłem, że URLForUbiquityContainerIdentifier: może zająć kilka sekund po raz pierwszy w sesji (użyłem go w systemie iOS5, więc teraz może być inaczej). Pamiętam za pomocą czegoś takiego:

dispatch_queue_t backgroundQueue = 
    dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
dispatch_async(backgroundQueue,^{ 
    BOOL isAvailable = [self isICloudAvailable] 
    /* change to the main queue if you want to do something with the UI. For example: */ 
    dispatch_async(dispatch_get_main_queue(),^{ 
     if (!isAvailable){ 
     /* inform the user */ 
     UIAlertView *alert = [[UIAlertView alloc] init...] 
     [alert show]; 
     [alert release]; 
     } 
    }); 
}); 
+0

doskonałe rozwiązanie. – NSSplendid

+1

Niestety ten link do dokumentu Apple nie działa. Możesz wyszukać URLForUbiquityContainerIdentifier tutaj: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html – Oscar

+0

Apple stale zmienia lokalizacje, link jest aktualizowany. :) – nacho4d

17

Wystarczy uzupełnić odpowiedź powyżej, jeśli tylko chcą wiedzieć, czy iCloud jest dostępna dla aplikacji, np
1. konto iCloud nie jest ustawiony, lub
2. Dokumenty i dane są wyłączone (dla wszystkich aplikacji) lub
3. Dokumenty i dane są wyłączone dla aplikacji tylko

następnie można wykorzystać do NSFileManager's ubiquityIdentityTokeniOS 6 i wyżej.
Jeśli wartość wynosi zero, to konto iCloud nie jest skonfigurowane. W przeciwnym razie skonfigurowane jest konto iCloud.

id token = [[NSFileManager defaultManager] ubiquityIdentityToken]; 
if (token == nil) 
{ 
    // iCloud is not available for this app 
} 
else 
{ 
    // iCloud is available 
} 

Należy zauważyć, że zgodnie z Apple docs można nazwać od głównego wątku.

Ponieważ ta metoda zwraca się względnie szybko, można wywołać ją w czasie uruchamiania i można wywołać ją z głównego wątku aplikacji.