Я успешно добавляю и обновляю записи в моих основных данных во втором потоке без проблем.
Однако удаление не вступает в силу, пока я не остановлю и не перезапущу приложение. Таким образом, удаление, очевидно, работает в определенной степени. Я читаю данные перед загрузкой таблицы и не делаю ничего другого, когда произошло удаление.
Я использую код
....fetch records....
BOOL deleteGem = FALSE;
if ([[attributeDict objectForKey:@"headline"] hasPrefix:@"VOID"])
deleteGem = TRUE;
if ([mutableFetchResults count] == 0) {
// not there so create a new one
if (!deleteGem) {
// so create a new one unless it needs deleting
gem = (Gem *)[NSEntityDescription insertNewObjectForEntityForName:@"Gem" inManagedObjectContext:managedObjectContext];
[gem setID:[attributeDict objectForKey:@"ID"]];
}
} else {
// already exists so either get it and then update or delete it
gem = [mutableFetchResults objectAtIndex:0];
if (deleteGem) {
// delete it if required
[managedObjectContext deleteObject:gem];
gemDeletes ++;
}
}
.....
Позже у меня есть способ сохранить любые обновления, включая:
NSError *error;
if (![self.managedObjectContext save:&error]) {
....
Любые идеи горячо приветствуются ...
Редактировать - с полным ответом на основе ответа @ TechZen ..
Зарегистрируйтесь для получения уведомлений об обновлениях во 2-м потоке в viewDidLoad
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleSaveNotification:) name:NSManagedObjectContextDidSaveNotification object:nil];
Отмена регистрации уведомлений в viewDidUnload
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSManagedObjectContextDidSaveNotification object:nil];
Обработка обновления в основном потоке (новый метод в контроллере представления)
-(void)handleSaveNotification:(NSNotification *)aNotification {
[managedObjectContext mergeChangesFromContextDidSaveNotification:aNotification];
}