3

NSFetchedResultsController蘋果文檔:核心數據 - 的NSManagedObjectContext VS NSFetchedResultsController

您使用已取得的成果控制器能夠有效地管理 從核心數據返回的結果讀取請求提供一個 UITableView的對象數據。

NSManagedObjectContext文檔:

它的主要職責是管理管理 對象的集合。

看來這兩個類的目的是重疊的。兩者都「管理提取的管理對象」。也許措辭的差異確實意味着什麼,但我不明白。在閱讀這兩個文檔之後,在我看來,所有的數據獲取,修改,提交,撤銷/重做等都由託管上下文處理。我沒有看到nsfrc的存在。

任何人都可以解釋爲什麼我們需要提取結果控制器,當我們已經有託管上下文來處理數據?

回答

3

NSManagedObjectContext是核心數據的一個基本概念,那種analagous到一個事務中的關係數據。您不僅可以抓取對象,你可以創建,更新和刪除它們,將它們保存回持久性存儲等

你不需要NSFetchedResultsController。它是一個實用程序類,用於以易於在表格視圖中使用的格式提供Core Data對象。在NSFetchedResultsController中使用的提取對象將由NSManagedObjectContext進行管理。

話雖如此,「效用階層」嚴重低估了它。它會自動管理諸如更新,插入和刪除底層數據源,緩存,部分等內容,這些是手動處理的難點。

+0

因此,MOC使用提取請求A從持久性存儲中獲取一些數據。然後,FRC使用提取請求B從該MOC獲取數據以提供表格視圖控制器。 A和B是兩個不同的獲取請求。那是對的嗎? – Philip007 2012-08-01 22:44:36

1

提取的結果控制器僅提取一個集合並對其進行監視以進行更改,以便可以自動更新表格視圖。您實際上不直接對NSFetchedResultsController進行任何更改。它鏈接到一個上下文(您在其中進行更改)和結果集。

+0

你能指定每個「它」究竟是指什麼?我不明白你的意思。 – Philip007 2012-08-01 10:17:58

+0

it = NSFetchedResultsController – borrrden 2012-08-01 10:53:05

4

A NSFetchedResultsController提及NSManagedObjectContext

FRC有責任按照您提供的標準從其MOC中提取和排序所有對象。

FRC是一個工具類,用於處理來自給定MOC的對象。

e.g All People with firstName is 'John', sorted by lastName

如果你添加一個新的人與firstName = 'John'由FRC引用的MOC,獲取的成果控制器將解決它,併發出一個代表回調。

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { 
    //do some stuff 
} 

NSManagedObjectContext是一堆東西。 NSFetchedResultsController是從該桶中挑選特定事物的一種方式。

相關問題