UIManagedDocument: Error / falla al crear nuevos files cuando la networking está baja (save)

Cuando bash save un UIManagedDocument recién creado en iCloud y la networking está inactiva (por ejemplo, el modo avión) obtengo el siguiente error (s) con un locking (se eliminan los códigos hexadecimales y las cosas ilegibles):

-[PFUbiquitySafeSaveFile waitForFileToUpload:](272): CoreData: Ubiquity: <PFUbiquityPeerReceipt: ...>(0) permanentLocation: <PFUbiquityLocation: ...>: /private/var/mobile/Library/Mobile Documents/XXXXXXXXXX~com~domain~AppName/TransactionLog/mobile.XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/DocumentName/XXXXXXXXXXXXXXX/receipt.0.cdt safeLocation: <PFUbiquityLocation: ...>: /private/var/mobile/Library/Mobile Documents/XXXXXXXXXX~com~domain~AppName/TransactionLog/mobile.XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/DocumentName/XXXXXXXXXXXXXXX/mobile.XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.0.cdt currentLocation: <PFUbiquityLocation: ...>: /private/var/mobile/Library/Mobile Documents/XXXXXXXXXX~com~domain~AppName/TransactionLog/mobile.XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/DocumentName/XXXXXXXXXXXXXXX/mobile.XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.0.cdt kv: (null) Safe save failed for file, error: Error Domain=NSCocoaErrorDomain Code=512 "The file upload timed out." UserInfo=... {NSLocalizedDescription=The file upload timed out.} *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation.' *** First throw call stack: (...) libc++abi.dylib: terminate called throwing an exception 

No conozco este error pero dice que no se pudo save el documento porque no es posible uploadlo (por supuesto, porque no hay networking). Pero no puedo entender por qué no puedo detectar este error con el controller de finalización de guardado:

 [theDocumentToSave saveToURL:theDocumentToSave.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) { if (success) { // Do somethings, go on, ... } else { // Catch error HERE, but this is never called! } }]; 

Desafortunadamente, esto representa un error interno en la integración de iCloud de Core Data. El UIManagedDocument todavía está intentando agregar su almacén de datos, o simplemente no lo ha hecho porque no hay connection de networking. Esa no es la forma en que se supone que funciona, pero es común tener fallas o retrasos largos para que iCloud esté funcionando con Core Data. El peor de los casos debería ser, como usted espera, que su bloque de finalización se llame con success establecido en NO . Bloquear su aplicación en este escenario no es su culpa, pero eso también significa que puede tener dificultades para hacer algo al respecto.

Es posible que pueda pnetworkingecir este locking por algo como:

 NSArray *persistentStores = theDocumentToSave.managedObjectContext.persistentStoreCoordinator.persistentStores; if ([persistentStores count] == 0) { // exception is likely, should be at least 1 } else { // exception probably won't happen } 

Sin embargo, es una especie de truco, y no te ayuda a save el documento. Además, no hay garantía de que el documento se pueda save en algún momento posterior. Podría evitar colisiones, sin embargo.

En general, Core Data más iCloud no es la combinación más confiable. Pregunté sobre la versión de iOS porque iOS 6.x es, digamos, less malo que iOS 5. Como ya tienes 6 años, no puedo sugerir cambiar a 6 con la esperanza de un mejor comportamiento.