Ho creato due contesto come questo:Strano padre/figlio NSManagedObjectContext fenomeno
// create writer MOC
_privateWriterContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_privateWriterContext setPersistentStoreCoordinator:_persistentStoreCoordinator];
// create main thread MOC
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
_managedObjectContext.parentContext = _privateWriterContext;
Ho un NSFetchResultedController
avviata con _managedObjectContext
.
So che è strano, ma sto aggiungendo un record al genitore a _privateWriterContext
, sono saving
esso.
Ciò che sorprende è che il contesto figlio e così FRC
venga avvisato di questo evento. Perché? Non ho il figlio con reset
o altro. Ho pensato che fossero entità indipendenti fino a quando il contesto figlio non verrà salvato.
Nell'articolo @pteofil ho trovato questa linea:
Quando viene apportata una modifica in un contesto, ma non salvato, è visibile a tutti i suoi discendenti, ma non ai suoi antenati .
.. viene inviato all'archivio permanente (tramite il coordinatore del negozio permanente) e diventa visibile a tutti i contesti connessi al negozio.
In base a questo articolo http://benedictcohen.co.uk/blog/archives/308, questo è un comportamento normale. – pteofil
E un altro ottimo articolo sulle prestazioni di diverse impostazioni del contesto gestito: http://floriankugler.com/2013/04/29/concurrent-core-data-stack-performance-shootout/ – pteofil
Vedo, pensi che sia in qualche modo possibile impedire che le modifiche si propagino nel contesto secondario? Ho pensato che le modifiche non verranno propagate fino a quando non osserverò "NSManagedObjectContextDidSaveNotification" e unirò le modifiche dalla notifica se sto usando due context che si uniscono alla stessa configurazione PSC –