2017-04-16 43 views
1

我需要爲一個實體獲取條目,並按照如何對tableView進行分類來對它們進行排序。不過,我只是爲了計算每個部分的出現次數,我並不需要與每個條目相關的實際數據。我的最終目標是有格式的詞典:NSFetchedResultsController用於分區讀取?

[String : Int] // Key: Section identifier, Value: occurrences for that section

是使用NSFetchedResultsController矯枉過正這樣一個任務或者我應該做一個正常的NSFetchRequest和部分關閉它取出後的數據?

有什麼想法?

+0

[NSFetchedResultsController:sort descriptors and sections]的可能重複(http://stackoverflow.com/questions/21280452/nsfetchedresultscontroller-sort-descriptors-and-sections) – 2017-04-16 09:05:49

回答

0

使用NSFetchedResultsController導致一個獲取並在sectionKeyPath對列表中的所有項的值調用(這將發生故障的每個項目,並可能運行的代碼,如果您對sectionKeyPath自定義屬性)。

如果您可以使用countForFetchRequest併爲每個部分分別提取請求,則會導致對每個部分的提取請求並且不會出現錯誤。

如果你有很多部分只有很少的項目,那麼使用fetchedResultsController可能會更快。如果你很少有很多項目在其中,那麼第二種方法可能會更快。真正瞭解測試和基準測試速度的唯一途徑。

我認爲,無論哪種方式都沒有問題,除非您遇到性能問題,您應該做最符合您需求的代碼。我個人會使用NSFetchedResultsController。這是顯示數據的首選方式,因爲它也可以幫助保持數據同步。

0

另一種選擇是使用指定段標識符的提取請求作爲propertiesToGroupBy並使用NSExpression來計算項目的計數。獲取請求將需要resultType設置爲.DictionaryResultType,並且獲取將返回一個字典數組。每個字典將有兩個鍵/值,一個是節標識符,另一個是項目計數。如果你在「GROUP BY」和「COUNT」上搜索,有很多關於SO的例子,但是如果你提供了你的實體,屬性,部分標識符等細節,我可以把一些代碼放在一起。正如另一個答案很難判斷這是否會提供超過FRC或正常取指的顯着速度優勢。