複数の要求を非同期で実行し、各応答がxmlを返します。私はXML(私はそれを解析するためにTBXMLを使用しています)を抽出し、コアデータに保存する必要があります。これは、UIが遅すぎるため、メインスレッドでは実行できません。私がやっている 各XML応答のために、次のNSManagedObjectのNSMergeConflict
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を解析し、コアデータにデータを挿入します。 これを実行すると、以下のようなマージ競合がたくさんあります。なぜこの問題をデバッグするための任意のアイデアや任意の手掛かり?私はコアデータモデルを変更していません。
NSMergeConflict for NSManagedObject with objectID '...'
with oldVersion = 117 and newVersion = 118 and
old object snapshot = ... and new cached row = ...
traverseElementの機能について簡単に説明できますか? – edsko