2

我在iOS上展示了一個帶有不同視圖控制器的NSManagedObject層次結構(基本上是三個層次)。我不完全明白的問題是,如果每個視圖控制器都需要NSFetchedResultsController。對於根視圖控制器來說,它看起來很方便,但後面的視圖基於前一視圖中的選擇。與直接關係相比,NSFetchRequest怎麼樣?顯示的數據是靜態的,並且不會改變,因此不需要準備更新。它將從核心數據sqlite文件中加載。NSFetchedResultsController/NSFetchRequest與NSManagedObject的多對多關係

這裏是我有什麼簡單的圖形:

A (1) <---> (*) B (1) <---> (*) C 

因此,無論A - BB - C關係是一個一對多和根視圖我顯示的A的List 。選擇一個A將在下一個視圖控制器等中顯示它的B

對於BNSFetchRequest(或NSFetchedResultsController)或只是使用A中的多對多關係,是否有任何區別?內存足跡或內存不足時的情況是否有差異?據我所知,當didReceiveMemoryWarning時,我總是可以將提取控制器帶走,但對於託管對象,我認爲它並不那麼簡單。這是嗎?我很樂意使用直接的關係。

在此先感謝。

回答

0

有區別,但不是一個你應該擔心,除非你有成千上萬的B和C的每一個A.

如果你使用的關係,那麼你會得到一個NSSet回來 - 這不會使用NSFetchedResultsController。但是,返回的對象實際上並沒有任何數據,它們都將作爲錯誤開始,所以內存佔用非常小。他們只會在您索要數據時檢索他們的數據:)

而且,如果您得到低內存警告,您可以通過從上下文重新加載管理對象(請參閱the docs here)再次強制管理對象成爲故障。

+0

謝謝你的回答。不,我沒有太多,至少要立刻提取。我的猜測是'NSFetchedResultsController'由於緩存和可能的延遲加載而與'UITableViewController'協作最好,對吧?感謝您提供有關錯誤的提示,我完全忘記了管理對象也可以清理。 – mkko