Abra UIDocument sincrónicamente

Actualmente estoy networkingiseñando mi aplicación existente desde el almacenamiento CoreData a una aplicación basada en documentos usando subclasss UIDocument . Esto es principalmente para poder introducir la synchronization de iCloud, ya que hay problemas continuos con la synchronization de iCloud en CoreData.

En algunos lugares, puedo replace fácilmente el uso de CoreData con el correspondiente event handling UIDocument , en algunos lugares, sin embargo, realmente estoy teniendo dificultades para replace el código síncrono con código asíncrono. Principalmente cuando necesito abrir algunos documentos sobre la marcha, solo para un acceso rápido, por ejemplo, durante un cálculo.

Ya implementé, por ejemplo, grupos de despacho, para esperar las operaciones de UIDocument , pero en algunos lugares esto no parece adecuado. Por ejemplo, cuando se deben abrir muchos de los documentos en secuencia para finalizar el cálculo, esto daría como resultado un encadenamiento muy complejo y extraño de bloques y grupos de envío.

Para comprender mejor el problema, déjeme describir brevemente qué rey de los documentos está utilizando mi aplicación:

  • Un documento por usuario activo (los diferentes usuarios pueden iniciar session / cerrar session)
  • Un documento por usuario + por año (la aplicación puede mostrar un año seleccionado)
  • Múltiples documentos de datos por usuario + por año
  • Algunos documentos de metadatos que pueden cargarse todos en memory solo una vez (no hay problema aquí)

Entonces, básicamente, para 1 usuario y 2 años de uso de la aplicación, puede haber alnetworkingedor de 50 documentos que deben mostrarse a pedido y utilizarse para el cálculo.

Los documentos de usuario siempre se abrirán y cargarán en la memory, no veo problemas aquí. Para los otros documentos, no es tan fácil, porque necesito cargarlos sobre la marcha, probablemente también documentos de otros usuarios que no están actualmente activos (esto elimina la posibilidad de cargar todos los documentos para el usuario actual en la memory).

Entonces, mi pregunta principal es: ¿cuál sería un buen enfoque para manejar muchos documentos?

Apuesto a que es una mala idea, simplemente cargar todos los documentos en la memory, también con respecto a la synchronization de iCloud.

¿Hay alguna API síncrona, o ejemplos de forzar UIDocument de synchronization / API síncronos para UIDocument ?

Puede abrir varios documentos sincrónicamente obligando al hilo actual a esperar en una condición:

 - (void)openDocumentsSynchronously:(NSArray *)documents { __block NSUInteger waitingOnDocuments = documents.count; NSCondition *condition = [NSCondition new]; for (UIDocument *document in documents) { [document openWithCompletionHandler:^(BOOL success) { waitingOnDocuments--; [condition lock]; [condition broadcast]; [condition unlock]; }]; } while (waitingOnDocuments > 0) { [condition lock]; [condition wait]; [condition unlock]; } } 

No recomendaría hacerlo en el hilo principal, ya que los documentos pueden tardar un poco en abrirse.