0
我在多線程環境中遇到CoreData問題。CoreData多線程
我有一個RestKit設置,這意味着有一個persistentManagedObjectContext(私有),我創建了一個子上下文(self.autoSyncMOC,也是私有的)。我沒有觸及RestKit(main-thread)的mainManagedObjectContext,它是persistentMOC(我的autoSyncMOC的同級)的子級。
@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