¿Cómo evitar la congelación de la interfaz de usuario mientras se guarda un contexto de objeto gestionado?

Quiero implementar la descarga y el análisis de un conjunto de datos de gran tamaño que respondan a la interfaz de usuario, guardándolos con Core Data.

Mi configuración:

Muestro el contenido descargado en un controlador de vista personalizado. No uso un controlador NSFetchedResults.

Hay 3 MOCs:

masterMOC (responsable de guardar en disco, NSPrivateQueueConcurrencyType)mainMOC (usado por UI, NSMainQueueConcurrencyType, un hijo del masterMOC)backgroundMOC (responsable de la importación desde JSON, creado en un subproceso separado, un hijo del masterMOC)

Importo en lotes: cada 50 elementos realizo el guardado de MOC de la siguiente manera:

NSError *error;
[backgroundMOC save:&error];
NSManagedObjectContext *masterMOC = backgroundMOC.parentContext; //set during initialization               
[masterMOC performBlock:^{
    NSError *parentContextError = nil;
    [masterMOC save:&parentContextError];
}];

Espero que los cambios en mainMOC se realicen después de que se guarde el masterMOC. Si trato de acceder a alguna relación de un objeto administrado aleatorio mientras el masterMOC se está guardando (el guardado lleva algún tiempo), la IU se bloquea hasta que se completa el guardado.

Pregunta: ¿cómo evitar la congelación de la interfaz de usuario mientras se está guardando el masterMOC?

Respuestas a la pregunta(1)

Su respuesta a la pregunta