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];
}
Но я не могу от них избавиться! Или я не знаю как....