正如标题所暗示的,我正在使用一个核心数据应用程序,该应用程序在不同的后台线程中填充了对象(XML 解析)
在我的后台线程中,我正在这样做
managedContext = [[NSManagedObjectContext alloc] init];
[managedContext setUndoManager:nil];
[managedContext setPersistentStoreCoordinator: [[DataManager sharedManager] persistentStoreCoordinator]];
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(mergeChanges:)
name:NSManagedObjectContextDidSaveNotification
object:managedContext];
NSMutableArray *returnSource = [[self parseDocument:doc] retain];
[managedContext save:&error];
if (error) {
NSLog(@"saving error in datafeed");
}
[managedContext reset];
[self performSelectorOnMainThread:@selector(parseCompleteWithSource:) withObject:returnSource waitUntilDone:YES];
Merge 方法如下所示:
NSManagedObjectContext *mainContext = [[DataManager sharedManager] managedObjectContext];
// Merge changes into the main context on the main thread
[mainContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
withObject:notification
waitUntilDone:YES];
[[NSNotificationCenter defaultCenter] removeObserver:self];
我认为合并是成功的,但是因为我想在 UITableView 中显示它,所以它总是告诉我我的对象无效,这是可以预期的,因为
[managedContext reset];
我想要做的是显示当前在数据库中的项目,在后台解析 xml,如果完成,我想用新的/更新的对象更新 UITableView。我将如何做到这一点,我可以以某种方式将对象“更新”到另一个 Context 还是合并无法正常工作?
我需要在 Main ObjectContext 中定义一些特定的东西吗?我尝试了不同的合并策略,但没有任何运气。
希望你能帮助我,谢谢!