controllerDidChangeContent блокирует основной поток

Когда я пытаюсь сохранить данные для частного NSManagedObjectContext Я захожу в тупик, даже если операции для этого контекста вызываются внутри performBlock: блок. Это странно, потому что этот блок должен выполняться асинхронно, без прерывания основного потока UI/UX.
Вот код этого метода:

- (void)loadTimetableToCoreData:(id)timetable
{   
    // Initializing temporary context
    NSManagedObjectContext *tempContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    tempContext.parentContext = self.moc;

    [tempContext performBlock:^{
      // Here is the parsing 

        NSLog(@"Finished loading to temp MOC");

        NSFetchRequest* r = [NSFetchRequest fetchRequestWithEntityName:@"Timetable"];
        [r setIncludesPendingChanges:NO];
        NSArray *existingTimetables = [tempContext executeFetchRequest:r error:nil];

        for (Timetable *table in existingTimetables) {
            [tempContext deleteObject:table];
        }

        // Saving procedure with multithreading
        NSError *error;
        if (![tempContext save:&error]) {
            NSLog(@"Couldn't save: %@", [error localizedDescription]);
        }

        NSLog(@"Finished saving to temp MOC");

        [self.moc performBlock:^{
            // Save groups to presistant store
            NSError *error;
            if (![self.moc save:&error]) {
                NSLog(@"Couldn't save: %@", [error localizedDescription]);
            }
            NSLog(@"Finished saving to main MOC");

            [self.writer performBlock:^{
                // Save groups to presistant store
                NSError *error;
                if (![self.writer save:&error]) {
                    NSLog(@"Couldn't save: %@", [error localizedDescription]);
                }
                NSLog(@"Finished saving to writer MOC");
            }];
        }];
    }];
}

Как вы можете видеть, есть некоторые NSLogВнутри этого метода и для визуализации моей проблемы я застрял между Завершенной загрузкой в ​​временный MOC и Завершенным сохранением в временный MOC.
Что я делаю не так и как разблокировать основной поток?

Обновить

Вот экран из инструментов и что я вижу... controllerDidChangeCintent убивает все.Я знаю, что это вызвано этими строками loadTimetableToCoreData:

NSFetchRequest* r = [NSFetchRequest fetchRequestWithEntityName:@"Timetable"];
        [r setIncludesPendingChanges:NO];
        NSArray *existingTimetables = [tempContext executeFetchRequest:r error:nil];

        for (Timetable *table in existingTimetables) {
            [tempContext deleteObject:table];
        }

Но я не могу от них избавиться! Или я не знаю как....

0 ответов

Другие вопросы по тегам