2012-06-13 15 views
11

Estoy usando NSUbiquitousKeyValueStore para sincronizar algunos datos de preferencia a iCloud. Descubrí que si el usuario deshabilita el elemento "Documento & Datos" de iCloud en "Configuración de la aplicación", NSUbiquitousKeyValueStore no puede sincronizar sus datos a iCloud. Por lo tanto, quiero comprobar primero si esta opción está activada sucesivamente.Después buscando en Google, me encontré con este fragmento de código:¿Cómo detectar de manera programada si el iCloud está habilitado en el dispositivo del usuario cuando solo usa 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; 

    } 

Lo que yo quiero saber es si esta es la única manera de detectar, incluso si sólo tiene que utilizar NSUbiquitousKeyValueStore (no almacenamiento de documentos iCloud). ¿Hay una mejor alternativa?

Respuesta

12

Básicamente, NSUbiquitousKeyValueStore está siempre disponible, incluso si el usuario no tiene una cuenta de iCloud (en este caso, NSUbiquitousKeyValueStore es simplemente un almacenamiento local simple). Por lo tanto, en general, no necesita preguntarse a sí mismo o al usuario si hay una cuenta configurada de iCloud.

Si realmente quieres saber con certeza, en iOS 5, la única solución es la que mencionas.

+0

Tu respuesta parece estar en conflicto con los documentos, que dicen: "Evita utilizar esta clase para datos que son esenciales para el comportamiento de tu aplicación cuando no estés conectado [...]". Ya publiqué una [pregunta] (http://stackoverflow.com/q/23662856/251760) sobre eso. ¿Serías capaz de responder eso? – Jonathan

+0

Lo que esto significa es que no debe confiar en que esta tienda es su verdad local sino más bien un simple canal de comunicación de sincronización entre sus dispositivos. – Julien

+0

Gracias! Hice su respuesta en una [respuesta] (http://stackoverflow.com/a/26556553/251760) a mi pregunta, espero que esté bien con eso. (Si prefiere hacer la respuesta usted mismo, me gustaría borrar la mía.) – Jonathan

3

No sé si los documentos se han actualizado, pero Apple dice ahora:

Para determinar si iCloud está disponible, especialmente en el momento del lanzamiento, comprobar el valor de la propiedad en lugar ubiquityIdentityToken

Consulte NSFileManager para ubiquityIdentityToken y URLForUbiquityContainerIdentifier.

Tenga en cuenta también que Apple dice que URLForUbiquityContainerIdentifier puede ser relativamente lento, y que comprobar ubiquityIdentityToken es relativamente rápido.

Esto es para iOS6 y superior.

+1

Esto es cierto si utiliza documentos de iCloud, la pregunta es sobre el almacenamiento de clave-valor de iCloud. –

+0

Hmmm. ¿No estoy recibiendo algo? Los documentos para ubiquityIdentityToken no sugieren que sea específico para los documentos de iCloud: "Cuando iCloud está actualmente disponible, esta propiedad [es decir, ubiquityIdentityToken] contiene un objeto opaco que representa la identidad del usuario actual. Si iCloud no está disponible por algún motivo o no no es un usuario registrado, el valor de esta propiedad es nulo ". –

+1

Como dijo Julien, el almacenamiento de clave-valor siempre está disponible (incluso cuando 'ubiquityIdentityToken' es nulo). Queremos verificar si el usuario deshabilitó Configuración> iCloud> Documento y datos. –

Cuestiones relacionadas