Guardando en el contexto de CoreData en el hilo de fondo

Estoy luchando con esto desde hace algún tiempo y la documentación de Apple y SO no ayudaron hasta ahora. Estaba usando ManagedObjectContext en un UIManagedDocument y el código siguiente funcionó bien. Entonces decidí usar la plantilla de Apple para CoreData en AppDelegate, por lo que el modelo, el coordinador de tienda persistente y el contexto se crean en AppDelegate. Recuperar con el contexto de AppDelegate no es un problema, pero el guardado en segundo plano es un problema. Debería tener contexto local en el hilo que estoy guardando y según Apple para tener el mismo coordinador de tienda de persistencia. Pero el código de abajo no guarda realmente los datos. ¿Puede alguien aquí por favor aconsejar? Gracias.

- (void)fetchAndPersist
{
    dispatch_queue_t ffetchQ = dispatch_queue_create("ForFetch", NULL);
    dispatch_async(ffetchQ, ^{

        NSManagedObjectContext *secureManagedObjectContext;
        NSPersistentStoreCoordinator *coordinator = [appDelegate persistentStoreCoordinator];
        if (coordinator != nil) {
            secureManagedObjectContext = [[NSManagedObjectContext alloc] init];
            [secureManagedObjectContext setPersistentStoreCoordinator:coordinator];
        }

        // find missing date
        DataManager *dataManager = [[DataManager alloc] init];
        NSDate *missingDate = [dataManager findMissingDateFromDate:selectedDate inContext:secureManagedObjectContext];

        if (missingDate) {
            // fetch and parse data
            DataFetcher *dataFetcher = [[dataFetcher alloc] init];
            NSDictionary *fetchResponse = [dataFetcher parseDataForDate:missingDate];

            // persist it in a block and wait for it
            [secureManagedObjectContext performBlock:^{
                DataStore *dataStore = [[DataStore alloc] init];
                BOOL parsingError = [dataStore persistData:fetchResponse inContext:secureManagedObjectContext];

                if (parsingError) {
                    // handle error
                } else {
                    dispatch_async(dispatch_get_main_queue(), ^{
                        // perform on main
                        [self fetchAndPersist];
                    });
                }
            }];
        }
    });
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta