我是 Core Data 的新手,所以我想编写简单的 fetch 请求来按某个字段对结果进行分组,并计算该组中另一个字段的计数。所以例如我有产品表我想按日期和产品数量检索所有分组产品,sql中的简单查询就像
SELECT DateRegistered,Count(*) FROM Products Group By DateRegistered
我是 Core Data 的新手,所以我想编写简单的 fetch 请求来按某个字段对结果进行分组,并计算该组中另一个字段的计数。所以例如我有产品表我想按日期和产品数量检索所有分组产品,sql中的简单查询就像
SELECT DateRegistered,Count(*) FROM Products Group By DateRegistered
您最好的选择是非常灵活的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 中显示(例如表格视图或集合视图)并最大限度地减少对持久存储的压力。