Ios NSFetchedResultsController用于分段提取?

Ios NSFetchedResultsController用于分段提取?,ios,core-data,Ios,Core Data,我需要获取一个实体的条目并按部分对它们进行排序,就像您对tableView所做的那样。但是,我这样做只是为了计算每个部分的出现次数,我不需要与每个条目关联的实际数据。我的最终目标是拥有一本格式词典: [String:Int]//键:节标识符,值:该节的出现次数 对于这样的任务,是否使用了NSFetchedResultsController过度杀戮,还是应该执行正常的NSFetchRequest,并在提取数据后切断数据 有什么想法吗?使用NSFetchedResultsController会对列表

我需要获取一个实体的条目并按部分对它们进行排序,就像您对tableView所做的那样。但是,我这样做只是为了计算每个部分的出现次数,我不需要与每个条目关联的实际数据。我的最终目标是拥有一本格式词典:

[String:Int]//键:节标识符,值:该节的出现次数

对于这样的任务,是否使用了
NSFetchedResultsController
过度杀戮,还是应该执行正常的
NSFetchRequest
,并在提取数据后切断数据


有什么想法吗?

使用
NSFetchedResultsController
会对列表中的每个项目进行一次提取并调用
sectionKeyPath
的值(如果您有
sectionKeyPath
的自定义属性,这将导致每个项目出错,并且可能会运行代码)

如果您可以使用
countForFetchRequest
并为每个节发出单独的提取请求,则会导致每个节都发出提取请求,并且不会出现错误

如果您有许多节,其中的项目很少,那么使用fetchedResultsController可能会更快。如果您只有很少的部分包含很多项,那么第二种方法可能会更快。真正知道哪种方法更快的唯一方法是it测试和基准测试


我认为这两种方法都可以,除非您遇到性能问题,并且您应该做对您的代码最有意义的事情。就个人而言,我会使用
NSFetchedResultsController
。这是我首选的显示数据的方式,因为它还可以帮助保持数据同步

使用
NSFetchedResultsController
会对列表中的每个项目进行一次提取并调用
sectionKeyPath
的值(这将导致每个项目出错,如果您有
sectionKeyPath
的自定义属性,则可能会运行代码)

如果您可以使用
countForFetchRequest
并为每个节发出单独的提取请求,则会导致每个节都发出提取请求,并且不会出现错误

如果您有许多节,其中的项目很少,那么使用fetchedResultsController可能会更快。如果您只有很少的部分包含很多项,那么第二种方法可能会更快。真正知道哪种方法更快的唯一方法是it测试和基准测试


我认为这两种方法都可以,除非您遇到性能问题,并且您应该做对您的代码最有意义的事情。就个人而言,我会使用
NSFetchedResultsController
。这是我首选的显示数据的方式,因为它还可以帮助保持数据同步

另一个选项是使用fetch请求,将节标识符指定为
propertiesToGroupBy
,并使用
NSExpression
计算项的计数。提取请求需要将
resultType
设置为
.DictionaryResultType
,提取将返回一个字典数组。每个字典将有两个键/值,一个是节标识符,另一个是项计数。如果你搜索“分组依据”和“计数”,有很多例子,但是如果你提供实体、属性、节标识符等的详细信息,我可以把一些代码放在一起,如另一个答案所示,很难判断这是否会比FRC或正常提取提供任何显著的速度优势。

另一种选择是使用提取请求,将节标识符指定为
propertiesToGroupBy
,并使用
NSExpression
计算项目的计数。提取请求需要将
resultType
设置为
.DictionaryResultType
,提取将返回一个字典数组。每个字典将有两个键/值,一个是节标识符,另一个是项计数。如果你搜索“分组依据”和“计数”,有很多例子,但是如果你提供实体、属性、节标识符等的详细信息,我可以把一些代码放在一起,如另一个答案所示,很难判断这是否会比FRC或正常提取提供任何显著的速度优势。

可能的重复