0

我是 Core Data 的新手,所以我想编写简单的 fetch 请求来按某个字段对结果进行分组,并计算该组中另一个字段的计数。所以例如我有产品表我想按日期和产品数量检索所有分组产品,sql中的简单查询就像

SELECT DateRegistered,Count(*) FROM Products  Group By DateRegistered
4

1 回答 1

1

您最好的选择是非常灵活的NSFetchedResultsController。您将有一个获取请求,该请求仅获取按日期属性排序的 Product 实体。请注意,核心数据属性应以小写字母开头。

您将使用以下内容创建获取的结果控制器。查看 Apple 示例代码(包括 Xcode 模板),这些代码通常在视图控制器中延迟创建:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Product"];
request.sortDescriptors = @[ [NSSortDescriptor 
             sortDescriptorWithKey:@"dateRegistered"
             ascending:YES] ];


_fetchedResultsController  = [NSFetchedResultsController
   initWithFetchRequest:request
   managedObjectContext:self.managedObjectContext
   sectionNameKeyPath:@"dateRegistered"
   cacheName:"Root"];

这只有在每天的日期确实相同时才有效。您可能希望使用一个字符串,因为NSDate类型将精确到分秒,并且您将在每个“组”中计数一个。

使用获取的结果控制器,您可以轻松访问所需的所有数字。例如“组”数的计数i(正确的术语是“部分”):

id <NSFetchedResultsSectionInfo> sectionInfo = 
       [[_fetchedResultsController sections] objectAtIndex:i];
int count = [sectionInfo numberOfObjects];

您可以使用 fetched results 控制器做更多事情!它将为您管理内存,促进在您的 UI 中显示(例如表格视图或集合视图)并最大限度地减少对持久存储的压力。

于 2013-06-04T14:32:53.337 回答