Ho due istanze di NSManagedObjectContext
: una è utilizzata nella filettatura principale e l'altra è utilizzata in una sottofilettatura (tramite NSOperation
). Per la sicurezza dei thread, questi due contesti condividono solo uno NSPersistentStoreCoordinator
.Copia di modifiche in sospeso tra NSManagedObjectContexts con archivio persistente condiviso?
Il problema riscontrato è che le modifiche in sospeso nel primo contesto (sul thread principale) non sono disponibili per il secondo contesto fino a quando non viene eseguito un -save
. Ciò è comprensibile poiché l'archivio persistente condiviso non avrà copie dello NSManagedObjects
tracciato da -insertedObjects
, -updatedObjects
e -deletedObjects
sono persistenti.
Sfortunatamente, questo presenta un problema con l'esperienza dell'utente: eventuali modifiche non salvate non verranno visualizzate nei rapporti (che richiedono molto tempo) generati nel thread in background.
L'unica soluzione che riesco a pensare è cattiva: prendere gli oggetti inseriti, aggiornati e cancellati dal primo contesto e inserirli nel grafico dell'oggetto del secondo contesto. Ci sono alcune relazioni piuttosto complesse nel set di dati, quindi sono riluttante ad andare in questa direzione. Spero che qualcuno qui sia una soluzione migliore.
Grazie Wil! Mi piacerebbe scegliere come target 10.6, anche se è sempre più difficile ogni giorno :-) - Sto già monitorando la notifica di modifica, ma non sono sicuro di come si applicano nuovamente le modifiche e si mantengono le relazioni tra entità. potresti essere un po 'più specifico? – chockenberry
Ah si. Stavo facendo in modo invisibile un'ipotesi basata sul mio modello, ovvero che ogni oggetto ha una chiave UUID (stringa) mantenuta dall'utente. –
Senza il salvataggio sullo sfondo MOC gli inserti non saranno visibili al MOC principale (senza MOC annidati). Gli aggiornamenti/eliminazioni per gli oggetti esistenti dovrebbero funzionare se si ascolta la notifica di modifica (rilasciata dopo processPendingChanges) e si aggiornano da soli gli oggetti. – diederikh