2016-04-12 38 views
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:...]; 
}]; 

可能出问题的是什么?我想我仍然不理解这些概念。

我知道需要更多的代码和上下文来给出正确的答案。我只想知道我的代码是否有效。

谢谢!

+0

我刚刚做了另一个测试,让我感到困惑:当我在属性中保存我的上下文时,代码会抛出异常。如果我只是在我的方法中创建它,一切都按预期工作。有人可以解释这个吗? – pawi

+0

你是什么意思,你把它保存到一个属性?你是在重新创建而不是将其存储在一个静态属性中? –

+0

我将它保存在一个静态属性中..在单例类中创建一次。 – pawi

回答