2011-03-07 39 views
1

很抱歉,如果這是一個新手的問​​題。我試圖圍繞核心數據包圍我的頭。iOS COreData中允許使用多個NSFetchedResults控制器?

我有一個標籤欄應用,其中每個標籤包含一個導航控制器。每個導航控制器的頂層是一張表,顯示了Core Data存儲中相同數據集的特定視圖和不同視圖。這有點像iTunes,其中一個Tab顯示由Artist組織的歌曲,另一個顯示按照標題組織的歌曲。

我的問題是NSFetchedResultsController需要居住在哪裏?每個導航控制器都可以有自己NSFetchedResultsController並進行提取以自己獨特的方式還是我必須把FRC在應用程序的委託,使這兩個選項卡可以訪問它?我知道上下文是在應用程序委託中,所以我認爲這也是這種情況。謝謝你的幫助。

回答

0

從NSFetchedResultsController到應用程序委託或特定視圖控制器沒有直接關係。

一般來說,您將擁有一個對應於數據集的FRC。如果相同的數據集適用於您應用中的每個VC,則可以使FRC可用的應用程序範圍更廣。如果您有許多與特定VC密切相關的不同數據集,則可以將它們作爲該VC的成員變量。

在我工作過的應用程序中,我傾向於發現每個VC有一個FRC是最常見的。

1

爲什麼多個NSFetchedResultsController會出現問題?他們只是獲取數據並監視上下文以進行更改。

你不會遇到不止一個NSFRController問題,至少,如果他們生活在自己的viewController,你當然應該不一樣的tableView從兩個不同的NSFRC代表改變。

我通常在viewWillDisappear方法中禁用(即self.frc = nil)NSFetchedResultsController。
恕我直言沒有必要更新5個UITableViews如果只有一個是可見的。

編輯:思考一點點關於它後,我得出的結論是,從每一個用戶切換標籤的時間分配一個新的FRC對性能的影響比更新5個tableviews更大。無論如何,我從來沒有檢查過tableViews是否更新了它們的單元格。

+0

我會釋放(並設置爲零)的NSFRC在viewDidUnload。這隻有在VC不可見時纔會被調用(並且內存變得稀缺),並且允許在viewControllers之間切換時更快地顯示數據。否則,您還需要重新載入tableView以確保對上下文所做的任何更改都可見。 – FelixLam 2011-03-07 20:59:11

+0

你是對的。可能是一個好主意,像你說的那樣改變它。我將爲我的應用提交增強請求。謝謝。 – 2011-03-07 21:13:01

0

NSFetchedResultsController專門設計用於將數據從核心數據提供給UITableViews。因此,每個tableview應該在tableview的控制器中擁有自己的控制器。

相關問題