2015-03-22 6 views
5

Hedefime -com.apple.CoreData.ConcurrencyDebug 1 bayrağı ekledim.-com.apple.CoreData.ConcurrencyDebug 1'i hem MainContext'te hem de PrivateContext'te eşzamansızlık engellemesi üzerinde kullanma

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
NSManagedObjectContext *privateManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; 
[privateManagedObjectContext setParentContext:_mainContext]; 
[User fetchUserWithContext:_ privateManagedObjectContext]; 
}]; 

Ben de denedim:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
[User fetchUserWithContext:_mainContext]; 
}]; 
Ben NSPrivateQueueConcurrencyType veya NSMainQueueConcurrencyType

Benim Kod kullanarak olduğumda Sorun çalıştıran bir arka plan blok olması ve çöküyor

Her iki durumda da şu gibi olsun:

CoreData` + [NSManagedObjectContext Çok dillding_Violat ion_AllThatIsLeftToUsIsHonor]: Yardımlarınız için

sayesinde Çekirdek Veri kuyruk eşzamanlılık işler değil nasıl

cevap

7

. NSPrivateQueueConcurrencyType veya NSMainQueueConcurrencyType'u kullanırken, içeriğe eriştiğinizde NSManagedObjectContext numaralı telefona performBlock veya performBlockAndWait yöntemlerini kullanmanız gerekir. Burada GCD kullandığınız gerçeği alakasız; sıra eşzamanlılığı kullanıyorsanız, bu yöntemleri kullanmalısınız veya yanlış yapıyorsunuz demektir.

fetchUserWithContext çağrınızı, bu yöntemlerden birine iletilen bir blok içine koymanız gerekir. Ayrıca, bu yöntemlerden birine aktarılan bir blok içindeki bağlamdan getirilen nesnelere erişen başka bir şey de eklemeniz gerekir.

+0

Bu eksik olan konuktum. Teşekkür ederim! – Lasti

İlgili konular