2016-08-22 50 views
2

我的問題聽起來有點混亂,但我找不到更好的標題。讓我解釋一下:我正在開發一個使用CoreData來存儲對象並使其持久化的iOS應用程序。我想在UITableView中顯示存儲的對象。每個對象都包含一個日期。我希望我的表視圖顯示按日期排序的對象,每個月是該表視圖中的一部分。只從CoreDate或所有東西獲取所需的數據?

+--------------------+ 
+--- March 2016 ---+ 
+--------------------+ 
+ - Entry 1   + 
+ - Entry 2   + 
+--------------------+ 
+-- February 2016 --+ 
+--------------------+ 
+ - Entry 1   + 
+ .....    + 
. 
. 
. 
. 
+--------------------+ 

由於表視圖需要知道多少行和部分有顯示的數據之前,我需要知道至少有多少項有我的CoreData存儲裏面。

方法1

我只取每個對象的日期,並告訴表視圖有多少行顯示。當數據源方法cellForRowAtIndexPath被調用時,我會爲我需要的對象提取數據。 CoreData的速度足夠快嗎?或者用戶不得不等待數據加載?

方法2

我取從我的CoreData存儲的一切,「存儲」在我ViewController持有表視圖中的對象。也許它需要大量的內存來保存每一個對象的內存。

方法3懶加載?)

我取從CoreData最新的10-20對象。當用戶向下滾動表格視圖並即將到達最後一個條目時,我獲取下一個10-20個條目並顯示它們。我最初加載的條目怎麼樣?我應該讓他們記憶嗎?或者如果用戶滾動到頂部再次抓取它們?

我不想在這上面「浪費」時間,並且自己嘗試每一個時間,我希望你能幫助我,而且有人有過這種東西的經驗。謝謝!

+0

方法3最適合你。提取對象後,將它們存儲在視圖控制器中的變量數組中。當用戶提取更多內容時,追加你的數組並重新加載你的表。 請記住,只有在您需要的情況下,您也可以提取計數,但這可能不是此處的最佳策略。 –

+0

你看過'NSFetchedResultsController'嗎? –

回答

0

您應該使用NSFetchedResultsControler。您列出的選項都不會顯示正確,因爲此需求已被框架支持。你不應該擔心要取什麼東西。只需提供正確的配置,一切都將由框架來處理。

當您實例化NSFetchedResultsController時,請提供sectionNameKeyPath參數。您的抓取結果將根據此屬性進行分組。它可以是您的案例中的計算屬性,即記錄的月份和年份。