2016-04-12 40 views
0

Mulit iş parçacıklı bir ortamda CoreData ile sorun yaşıyorum.CoreData Çok iş parçacıklı

Bir RestKit kurulumuna sahibim, yani bir alt bağlam oluşturduğum bir persistentManagedObjectContext (private) var (self.autoSyncMOC, ayrıca özel). PersistentMOC'nin (autoSyncMOC'imin kardeşi) bir çocuğu olan RestKit (ana iş parçacığı) mainManagedObjectContext öğesine dokunmuyorum. Burada yanlış gidebilir ne

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:...]; 
}]; 

:

@property (nonatomic, strong) NSManagedObjectContext *autoSyncMOC; 

Bu Multithreading_Violation_AllThatIsLeftToUsIsHonor istisna atar Kod nedir? Sanırım hala kavramları anlamadım.

Uygun bir yanıt vermek için birinin daha fazla kod ve bağlam gerektirdiğini biliyorum. Sadece kodumun geçerli olup olmadığını bilmek istiyorum.

Teşekkürler!

+0

Sadece kafamı karıştıran başka bir test yaptım: İçeriğimi bir özellikte kaydettiğimde, kod istisnayı atar. Eğer metotum içinde yaratırsam, her şey beklendiği gibi çalışır. Birisi bunu açıklayabilir mi? – pawi

+0

Ne demek onu bir mülke sakladığın? Statik bir mülkte depolamak yerine onu yeniden mı yaratıyorsunuz? –

+0

Tek bir sınıfta sadece bir kez oluşturulmuş bir statik özelliğe kaydediyorum. – pawi

cevap

İlgili konular