¿Cómo detectar de manera programática si iCloud está habilitado en el dispositivo del usuario cuando solo usa NSUbiquitousKeyValueStore?

Estoy usando NSUbiquitousKeyValueStore para sincronizar algunos datos de preference a iCloud. Descubrí que si el usuario deshabilita el elemento "Documento y datos" de iCloud en "Configuración de la aplicación", NSUbiquitousKeyValueStore no puede sincronizar sus datos con iCloud. Por lo tanto, primero quiero verificar si esta configuration está activada. Después de search en Google, encontré este fragment de código:

  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 quiero saber es si esta es la única forma de detectar, incluso si solo utilizo NSUbiquitousKeyValueStore (no el almacenamiento de documentos de iCloud). ¿Hay una mejor alternativa?

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

Si realmente quieres saberlo con certeza, en iOS 5, la única solución es la que estás mencionando.

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

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

Consulte NSFileManager tanto para ubiquityIdentityToken como URLForUbiquityContainerIdentifier .

Tenga en count también que Apple está diciendo que URLForUbiquityContainerIdentifier puede ser relativamente lento, y que verificar ubiquityIdentityToken es relativamente rápido.

Esto es para iOS6 y superior.

    Intereting Posts