2016-01-25 29 views
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非常相似的已更新为iOS 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 v10.7及更高版本和iOS V5.0及更高版本中,父存储可能是另一个托管对象上下文。最终,上下文祖先的根源必须是持久的商店协调员。协调器提供受管对象模型并将请求分派到包含数据的各种持久性存储。

你的具体情况:

如果上下文的父店另一个管理对象上下文,获取和保存操作由代替协调父上下文介导的。此模式有多种使用场景,包括:

  • 在第二个线程或队列上执行后台操作。

来源:的NSManagedObjectContext类引用, “Parent Store”。