2016-01-20 63 views
0

我一直在閱讀,如果您使用具有私有隊列併發類型的上下文,具有該上下文的FetchedResultsController也會在該私有隊列上調用其委託方法。 (例如在this SO answer中鏈接的here)。NSFetchedResultsControllerDelegate和PrivateQueueConcurrency

我測試過了,我的視圖控制器(FRC委託)正在主線程上接收這些調用。只是好奇,如果有人對此有明確的答案。

我在主線程上創建並調用MO上下文和FRC。我的-performBlock在上下文調用只做一些模型更改並保存 - 它們不會觸摸UI或向mainQueue發送任何東西

編輯:具體而言,下面的引用是正確的;即我們需要實現 使用調用主隊列

NSFetchedResultsControllerDelegate回調現在將來自於上下文的隊列中的FRC委託方法。你這樣做,結果任何用戶界面更新需要被分派到主隊列:

- (void)controllerDidChangeContent:(NSFetchedResultsController*) controller { 
[[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
    [[self tableView] endUpdates]; 
}]; 

}

+0

在你引用的問題中,它明確解釋說,只有當你在後臺上下文中執行FRC的提取時,**纔會在主線程中執行**。 – Mundi

+0

是的,抓取和保存是在私有上下文中的-performBlock中完成的。我編輯,使我的問題更清晰。 – BoombaleOsby

回答

0

如果您獲取結果控制器委託方法在一個視圖控制器來實現他們應該是在主線程中調用。通常,視圖控制器控制視圖並響應數據更改以更新主線程上發生的管理視圖。

如果您「不要觸摸UI」,您應該使用視圖控制器而不是但使用某種抽象數據管理器類。確保託管對象上下文具有私有隊列併發類型,並且您可以通過塊API調用所有調用(包括FRC的performFetch)。

相關問題