2011-10-19 16 views

Respuesta

27

Editar:
Si el idioma de iOS 6 o superior puede utilizar [[NSFileManager defaultManager] ubiquityIdentityToken];. Para el ejemplo de uso, consulte @Dj S' answer :).
es más rápido y más fácil que la solución original que estaba destinado para las personas de orientación IOS5 y por encima de

respuesta original
Como se documenta en iOS App programming guide - iCloud Storage. Eso se puede comprobar preguntando a la URL contenedor de ubicuidad para el administrador de archivos :)

Mientras que proporcione un identificador de contenedor ubicuidad válida por debajo método debe devolver SÍ

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

Sin embargo, he encontrado que URLForUbiquityContainerIdentifier: podría tomar varios segundos la primera vez en una sesión (lo usé en iOS5, por lo que las cosas podrían ser diferentes ahora). Recuerdo el uso de algo como esto:

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

excelente solución. – NSSplendid

+1

Desafortunadamente, ese enlace al documento de Apple no funciona. Puede buscar URLForUbiquityContainerIdentifier aquí: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html – Oscar

+0

Apple cambia constantemente de ubicación, se actualiza el enlace. :) – nacho4d

17

Sólo para complementar la respuesta anterior, si solo deseas saber si iCloud está disponible para su aplicación, por ejemplo,
1. ninguna cuenta de iCloud es la instalación o
2. Documentos y Datos está desactivado (para todas las aplicaciones), o
3. Documentos y Datos está deshabilitado para su aplicación sólo

entonces usted puede utilizar para NSFileManager's ubiquityIdentityTokeniOS 6 y superior.
Si el valor es nulo, la cuenta de iCloud no está configurada. De lo contrario, la cuenta de iCloud está configurada.

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

Tenga en cuenta que de acuerdo a Apple docs, se le puede llamar desde el hilo principal.

Como este método regresa con relativa rapidez, puede llamarlo al momento del lanzamiento y puede llamarlo desde el hilo principal de su aplicación.

Cuestiones relacionadas