2012-08-31 25 views
12

A veces tengo un problema con la apertura de UIDocuments que se almacenan en iCloud. Llamo al siguiente código al comienzo de mi aplicación después de comprobar si iCloud está disponible y obtener los resultados de NSMetaDataQuery. Esto funciona en el 98% de todos los casos. Es sólo a veces (por ejemplo, a veces después de volver a instalar la aplicación) que el completionHandler nunca será llamado:¿Por qué iCloud a veces deja de funcionar?

FRNBDocument *doc = [[FRNBDocument alloc] initWithFileURL:fileURL]; 
[doc openWithCompletionHandler:^(BOOL success) { 

    NSLog(@"... doc: openedWithCompletionHandler"); 

Como se puede ver en el código, estoy inicializar una nueva instancia UIDocument (FRNBDocument), por lo que no puede ser el caso que un antiguo UIDocument todavía está abierto y, por lo tanto, éste no se puede abrir.

La única manera de hacer que la aplicación vuelva a funcionar es eliminarla y luego ir a la configuración.app> iCloud> Documentos & Datos y APAGARLA y volver a encenderla. Cuando regrese a la aplicación, los UIDocs se cargarán sin problemas.

Me he dado cuenta de que otras aplicaciones (por ejemplo, xTrail by sophiestication) tienen el mismo problema y que solo puedo hacer que funcionen nuevamente después del truco descrito anteriormente.

¿Qué está pasando?

+0

Puede publicar el código que utiliza para adjuntar a iCloud y el resto del código de archivo ... no hay suficiente código aquí. –

+0

@stackmonster Utilizo el código normal que me gustaría publicar, pero no creo que sea de mucha ayuda. Habló con Apple y parece que es un error muy conocido. –

Respuesta

3

Bien, esto parece ser un error de iCloud. Estuve en contacto con Apple y me sugirieron que presentara un informe de error. Y así lo hice (id 12260670).

Lo que haré ahora es simplemente implementar un temporizador. Si los UIDocs no se han cargado después de 20 segundos, mostraré un AlertView, indicándole al usuario que vaya a la configuración.app> iCloud> Documentos & Datos y apáguela y vuelva a encenderla.

Esto es muy frustrante. Increíble.

+1

@stackmonster Si no es un error, explique por qué. Estaré encantado de marcar su respuesta como la correcta si resuelve el problema. Gracias. Por cierto, he intentado utilizar una Incidencia del soporte técnico para esta pregunta, por lo que estoy seguro de que me hubieran explicado la API si esto no fuera un error. Pero ellos reembolsaron la incidencia TCI y dijeron que debería presentar un error en su lugar. –

0

acceso iCloud requiere devolver la llamada de la función

- (NSURL *)URLForUbiquityContainerIdentifier:(NSString *)containerID 

que devuelve

una URL que dirige al contenedor ubicuidad especificado o nula si el recipiente no pudo ser localizado o si iCloud el almacenamiento no está disponible para el usuario o dispositivo actual.

Reference

A medida que el iCloud no es tan sensible, puedo comprobar si tengo la URLy sólo entonces proceder a una mayor sincronización de los datos.

NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]; 
if (ubiq) 
{ 
    NSLog(@"iCloud access at %@", ubiq); 
    [self loadDocument]; 
} 
else 
{ 
    NSLog(@"No iCloud access"); 
} 
+0

No creo que este sea el problema. Obtengo un ubiq válido e incluso obtengo resultados a través de NSMetaDataQuery. Sin embargo, ninguno de los resultados se puede cargar una vez que iCloud está atascado. –

+0

puede agregar notificación mediante [[NSNotificationCenter defaultCenter] addObserver: auto selector: @selector (queryDidFinishGathering :) nombre: NSMetadataQueryDidFinishGatheringNotification objeto: consulta]; –

+0

He hecho todo eso. Podría publicar el código completo, pero sería bastante tedioso y sin importancia. Me he asegurado de que todo esté bien, y funciona el 95% del tiempo. Algunas veces, solo algunas veces, iCloud se reproduce y no cargará un UIDocument. Aparentemente es un problema conocido: otros desarrolladores tenían el mismo problema. –

1

Tengo un problema similar. NSMetadataQuery devuelve un resultado, pero openWithCompletionHandler: muy ocasionalmente no se completa y, por lo tanto, los datos de la aplicación no se cargan. Durante un tiempo, tuve una solución al comprobar NSMetadataUbiquitousItemIsDownloadedKey antes de intentar cargar el documento. Si no se descargó, llamé a evictUbiquitousItemAtURL y luego comencé a descargarUbiquitousItemAtURL. Luego tuve que seguir sondeando con NSMetadataQuery para que NSMetadataUbiquitousItemIsDownloadedKey fuera verdadero, momento en el que pude llamar con éxito a openWithCompletionHandler. Esto pareció resolver el problema. Sin embargo, esto parece ser frustrante: o ya no funciona en iOS 6 o ya no funciona todo el tiempo. Manténganos actualizados si encuentra una solución mejor o si recibe una actualización sobre el error de Apple.

Cuestiones relacionadas