【发布时间】:2011-10-24 14:33:11
【问题描述】:
我异步执行多个请求,每个响应返回一个 xml。我需要提取 xml(我正在使用 TBXML 来解析它)并将其保存在 Core Data 中。这不能在主线程上完成,因为 UI 会变得太慢。 我正在为每个 xml 响应执行以下操作:
dispatch_queue_t request_queue = dispatch_queue_create("com.queue.name", NULL);
dispatch_async(request_queue, ^{
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *newMOC = [[NSManagedObjectContext alloc] init];
[newMOC setPersistentStoreCoordinator:[appDelegate persistentStoreCoordinator]];
newMOC setUndoManager:nil];
NSNotificationCenter *notify = [NSNotificationCenter defaultCenter];
[notify addObserver:self
selector:@selector(mergeChanges:)
name:NSManagedObjectContextDidSaveNotification
object:newMOC];
[self traverseElement:tbxml.rootXMLElement inMOC:newMOC];
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSManagedObjectContextDidSaveNotification object:newMOC];
[newMOC release];
});
dispatch_release(request_queue);
- (void)mergeChanges:(NSNotification*)notification
{
AppDelegate *theDelegate = [[UIApplication sharedApplication] delegate];
[[theDelegate managedObjectContext] performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) withObject:notification
waitUntilDone:YES];
}
在 traverseElement 方法中,我解析 xml 并将数据插入到 Core Data 中。 执行此操作时,我遇到了很多合并冲突,如下所示。任何想法为什么或任何线索来调试这个问题?我没有更改核心数据模型。
NSMergeConflict for NSManagedObject with objectID '...'
with oldVersion = 117 and newVersion = 118 and
old object snapshot = ... and new cached row = ...
【问题讨论】:
-
您能否简要描述一下您的 traverseElement 的作用?