2012-01-29 10 views
6

Cuando está en el modo de avión o en cualquier otro estado donde el acceso a la red no está disponible, llamará a NSFileManager URLForUbiquityContainerIdentifier: return nil?¿URLForUbiquityContainerIdentifier: devuelve nil cuando el acceso a la red no está disponible?

Una pregunta de seguimiento a esto es: si esta llamada a URLForUbiquityContainerIdentifier: no devuelve nada, sino más bien devuelve una URL válida cuando el acceso a la red no está disponible esta es una manera de acceder a los documentos basados ​​en la nube fuera de línea?

Los documentos de apple indican que esto devolverá nil si iCloud no está configurado o no está habilitado. No menciona lo que sucederá si el acceso a la red no está disponible.

Lo probaría yo mismo, pero por lo que entiendo, tendría que probar esto en un dispositivo real y no es posible hacer pruebas en un dispositivo en este momento. ¡Gracias!

Respuesta

5

UbiquityContainer es un contenedor de almacenamiento local que contiene los documentos que solicitó de iCloud. Este contenedor está disponible cuando la red no lo está. Al utilizar el siguiente ejemplo

NSURL *ubiq = [[NSFileManager defaultManager] 
    URLForUbiquityContainerIdentifier:nil]; 
if (ubiq) { 
    NSLog(@"iCloud access at %@", ubiq); 
    // TODO: Load document... 
} else { 
    NSLog(@"No iCloud access"); 
} 

Va a acceder a los archivos y la ubicuidad contenedor cuando el teléfono está aún en modo avión. Cuando las conexiones de red se restablecen, icloud daemon sincronizará automáticamente los archivos incluso en segundo plano.

Aquí hay un excelente artículo sobre la configuración de iCloud. http://www.raywenderlich.com/6015/beginning-icloud-in-ios-5-tutorial-part-1

+1

¡Gracias! He estado tratando de entender esto durante días (lo cual no estoy feliz de admitir jaja). Creo que mi confusión se basaba en el hecho de que pensaba que ubiquityContainer era una ubicación en la nube y no un contenedor de almacenamiento local. Este era un concepto fundamental que no estaba comprendiendo. ¡Gracias de nuevo! –

+0

Claro, en realidad acabo de responder otro en UbiquityContainers de iCloud. Debo mencionar que NSFileManager puede estar bloqueando y se recomienda su ejecución en una cola diferente. Echa un vistazo a esta respuesta: http://stackoverflow.com/questions/9050359/should-urlforubiquitycontaineridentifier-be-called-in-a-thread-outside-the-main/9051105#9051105 – MobileOverlord

+1

Buen punto sobre el bloqueo - es gracioso, porque Si observa los documentos de ejemplo de Apple o el código del sitio web al que hizo referencia anteriormente, las llamadas a URLForUbiquityContainerIdentifier se encuentran en el hilo principal. Pensarías que Apple tomaría nota de esto si fuera un problema potencial, ¿no? –

Cuestiones relacionadas