0

Я пытаюсь решить проблемы, вызванные доступом к одному и тому же NSManagedObjectContext из нескольких потоков. Я нашел следующее в Apple docs:Многопоточные данные ядра - persistentStoreCoordinator vs parentContext

let moc = … //Our primary context on the main queue 

let privateMOC = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType) 
privateMOC.parentContext = moc 

privateMOC.performBlock { 
    //... 
} 

который, кажется, что я после. Я также нашел что-то очень похожее на tutorial, который был обновлен для прошивки 9:

let privateContext = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType) 
privateContext.persistentStoreCoordinator = coreDataStack.context.persistentStoreCoordinator 

privateContext.performBlock {() -> Void in 
    //... 
} 

Они оба, кажется, добиться того же, однако версия яблока Дока использует parentContext вместо использования persistantStoreCoordinator непосредственно. В чем разница между этими двумя подходами?

ответ

1

Использование parentContext. Это предпочтительнее для метода с постоянным координатором хранилища, поскольку iOS 5.

До OS X v10.7 и iOS v5.0 родительский магазин всегда является постоянным координатором хранилища. В OS X версии 10.7 и более поздних версиях и iOS версии 5.0 и более поздних версий родительский магазин может быть другим контекстом управляемого объекта. В конечном итоге корень предка контекста должен быть постоянным координатором магазина. Координатор предоставляет модель управляемых объектов и отправляет запросы в различные постоянные хранилища, содержащие данные.

В вашем конкретном случае:

Если контекст родительского магазин другой управляемый контекстный объекта, закачивать и сохранять операции опосредуются родительским контекстом вместо координатора. Этот шаблон имеет ряд сценариев использования, в том числе:

  • Выполнение фоновых операций во втором потоке или очереди.

Источник: NSManagedObjectContext ссылка на класс, "Parent Store".