2011-10-24 1 views
1

複数の要求を非同期で実行し、各応答が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 = ... 
+0

traverseElementの機能について簡単に説明できますか? – edsko

答えて

1

マージ競合は、管理対象オブジェクトコンテキストの変更を保存しようとしたときに発生する競合をカプセル化します。永続ストアコーディネータ層での管理対象オブジェクトコンテキストとそのメモリ内にキャッシュされた状態との間

は、二つの競合が発生する可能性がある状況があります。この場合、マージ競合にはソースオブジェクトとキャッシュされたスナップショットがありますが、永続スナップショットはありません。

永続ストアコーディネータのキャッシュ状態と外部ストア(ファイル、データベースなど)の間です。この場合、マージ競合には、キャッシュされたスナップショットと永続化されたスナップショットがあります。

ここにdocumentationを参照してください。

+1

匿名のdownvotes - 非常に建設的な> :-( – Mundi

+0

https://developer.apple.com/library/ios/documentation/CoreData/Reference/NSMergeConflict_Class/Reference/Reference.html引用が必要です –

+0

@LuongHuyDuc良い点 - これはしばらくありました私はそれを修正しましたが、ダウン投票する必要はありません。 – Mundi