2016-01-25 134 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」。