Comportamiento extraño al usar NSManagedObjectContext child / parent

Estoy desarrollando una aplicación en la que necesito tanto calcular cosas (operaciones de varios segundos) como escribirlas (sincronizar datos con un servidor) en un hilo de fondo.

Debido a esto, uso dos NSManagedObjectContexts (MOC), un hijo y un padre, y estos siempre deben estar sincronizados. Para asegurarme de que estén sincronizados, siempre edito / agrego datos al MOC secundario para que se transfiera al MOC principal con el siguiente patrón:

[childMOC performBlock:^{

    MyObject *myObject = *create new object in childMOC*

    [childMOC save:&error];

    [mainMOC performBlock:^{
        [mainMOC save:&error];
        // Is this mandatory to make it work correctly?
        // [childMOC performBlock:^{
        //     [childMOC refreshObject:myObject mergeChanges:NO];
        // }];
    }];
}];

Después de un tiempo, parecía tener dos versiones del mismo objeto en el contexto de fondo, una con una identificación temporal y otra con una identificación permanente. Si por ejemplo se agregaron objetos secundarios al "real" (al pasar la nueva identificación permanente del MOC principal al secundario) No vi estos objetos cuando recuperé mi objeto en el MOC de fondo porque es el antiguo temporal el que está en caché.

He visto que el patrón anterior se ha utilizado mucho, pero parece extraño que nadie haya mencionado este problema de identificación temporal / permanente.

No parece correcto que puedan ser dos versiones del mismo objeto dentro de un contexto. Si paso un NSManagedObjectID al MOC secundario y lo recupero, ¿no debería el MOC secundario actualizar mi objeto existente en lugar de crear uno nuevo y dejar mi antiguo temporal como predeterminado en caché?

¿Necesito usar la fila comentada en cada lugar donde creo un objeto?

O tal vez funciona con mergeChangesFromContextDidSaveNotification, ¿eso dará el mismo efecto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta