2016-04-12 13 views
0

マルチスレッド環境でCoreDataに問題があります。CoreDataマルチスレッド

私はRestKitセットアップを持っています。つまり、子コンテキスト(self.autoSyncMOC、プライベートも)を作成するpersistentManagedObjectContext(プライベート)があります。私は、persistentMOC(私のautoSyncMOCの兄弟)の子であるRestKit(メインスレッド)のmainManagedObjectContextに触れていません。

@property (nonatomic, strong) NSManagedObjectContext *autoSyncMOC; 

これはMultithreading_Violation_AllThatIsLeftToUsIsHonor例外をスローコード:

self.autoSyncMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; 
self.autoSyncMOC = [RKObjectManager sharedManager].managedObjectStore.persistentStoreManagedObjectContext; 

[self.autoSyncMOC performBlockAndWait:^{ 

    //do normal fetch 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:...]; 
    fetchRequest.predicate =[NSPredicate... 
    NSArray *result = [self.autoSyncMOC executeFetchRequest:fetchRequest error:nil]; 

    //do stuff with fetched objects (i.e. set a property) 
    for (DownloadableItem *item in result) { 
     item.checksumDownload = @"test"; 
    } 

    //save context  
    [self.autoSyncMOC save:...]; 
}]; 

ここで何が間違って行くことができますか?私はまだコンセプトを理解していないと思う。

私は適切な答えを与えるために、より多くのコードとコンテキストが必要であることを知っています。私は自分のコードが有効かどうかを知りたい。

ありがとうございます!

+0

私は混乱して別のテストをしました。私のコンテキストをプロパティに保存すると、コードは例外をスローします。私のメソッド内で作成すれば、すべてが期待通りに機能します。誰かがこれを説明できますか? – pawi

+0

プロパティに保存するとどういう意味ですか?それを静的なプロパティに格納するのではなく、再作成していますか? –

+0

私はそれを静的プロパティに保存します。シングルトンクラスで一度だけ作成します。 – pawi

答えて