我是Core Data的新手,所以我想编写一个简单的获取请求来按某个字段对结果进行分组,并且还要计算该组中另一个字段的计数。 所以例如我有产品表我想按日期检索所有分组产品和产品数量,sql中的简单查询就像
SELECT DateRegistered,Count(*) FROM Products Group By DateRegistered
答案 0 :(得分: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];
您可以使用获取的结果控制器执行更多操作!它将为您管理内存,便于在UI中显示(例如表视图或集合视图),并最大限度地减少持久存储的压力。