2015-09-25 50 views
1

最新條目我不知道是否有一個(簡單)的方式實現使用NSFetchedResultsController如下:CoreData組

說我有一個這樣的訪問者日誌表:

visitor_name (String) 
visit_time (Date) 
visited_building_id (String) 

例子數據:

John, 2015-09-25 10:00:00, ABC 
Jane, 2015-09-25 10:20:00, ABC 
Mark, 2015-09-25 10:40:00, ABC 
Jane, 2015-09-25 10:10:00, DEF 

而且我想表明它顯示誰最近訪問過的每一個建築物表視圖,所以它上面的數據應顯示兩行:

[ABC, Mark, 9/25 10:40] 
[DEF, Jane, 9/25 10:10] 

回答

0

一個解決辦法是:由visited_building_id(升序或降序爲您喜歡),然後通過visit_time(降序)

  1. 排序項。
  2. 指定visited_building_id作爲sectionNameKeyPath用於獲取的結果控制器。因此,FRC將爲每棟建築設置一個部分,每個部分的第一個對象將是最近一次訪問。您希望您的表格視圖行顯示FRC每個部分中的第一個項目。所以...
  3. 修改tablewView數據源方法,將FRC部分重新映射到您的tableView行。因此,例如numberOfRowsInSection將返回frc.sections.countcellForRowAtIndexPath將構造一個新的NSIndexPath使用

    NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:0 inSection:(indexPath.row)]

    let newIndexPath = NSIndexPath(forRow:0, inSection:indexPath.row)

    ,並使用此newIndexPath以獲得使用FRC的objectAtIndexPath方法的單元格中顯示的對象。

請注意,此重新映射必須在其他數據源方法中重複/反轉。這也意味着你的tableView只能有一個部分。

+0

我認爲如果有成千上萬的記錄會效率太低,但這是一個有趣的黑客攻擊,所以我會接受它。 – SVD

+0

你可以用'fetchBatchSize'甚至'propertiesToFetch'來優化它。另一種選擇是將'visit_building_id'指定爲'propertiesToGroupBy',將'max:(visit_time)'指定爲'propertiesToFetch'。但是你將不得不使用'NSDictionaryResultType'這意味着你將不得不重新獲取以獲得相應的'visitor_name'。 – pbasdf