マルチスレッド環境で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:...];
}];
ここで何が間違って行くことができますか?私はまだコンセプトを理解していないと思う。
私は適切な答えを与えるために、より多くのコードとコンテキストが必要であることを知っています。私は自分のコードが有効かどうかを知りたい。
ありがとうございます!
私は混乱して別のテストをしました。私のコンテキストをプロパティに保存すると、コードは例外をスローします。私のメソッド内で作成すれば、すべてが期待通りに機能します。誰かがこれを説明できますか? – pawi
プロパティに保存するとどういう意味ですか?それを静的なプロパティに格納するのではなく、再作成していますか? –
私はそれを静的プロパティに保存します。シングルトンクラスで一度だけ作成します。 – pawi