【发布时间】:2021-12-23 16:33:21
【问题描述】:
我在核心数据中有开始日期属性,我想获取项目以及根据开始日期分组,
但是 startDate 里面基本上有 timeComponent,但是我希望分组是基于 yyyy-mm-dd,
这是我正在使用的代码
NSError *error = nil;
NSFetchRequest *request = [NSFetchRequest new];
NSManagedObjectContext *context = self.managedObjectContext;
request.entity = [CalendarItem entityInManagedObjectContext:context];
NSExpression *startExpr = [NSExpression expressionForKeyPath:@"start"];
NSExpression *countExpr = [NSExpression expressionForFunction:@"count:" arguments:[NSArray arrayWithObject:startExpr]];
NSExpressionDescription *exprDesc = [[NSExpressionDescription alloc] init];
[exprDesc setExpression:countExpr];
[exprDesc setExpressionResultType:NSInteger64AttributeType];
[exprDesc setName:@"count"];
[request setPropertiesToGroupBy:@[@"start"]];
[request setPropertiesToFetch:[NSArray arrayWithObjects:@"start", exprDesc, nil]];
[request setResultType:NSDictionaryResultType];
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];
这是我得到的输出:
Printing description of results:
<_PFArray 0x600001e3a700>(
{
count = 1;
start = "2021-09-14 03:30:00 +0000";
},
{
count = 1;
start = "2021-09-14 04:00:00 +0000";
},
{
count = 1;
start = "2021-09-16 09:30:00 +0000";
},
{
count = 1;
start = "2021-11-11 00:00:00 +0000";
},
{
count = 1;
start = "2021-11-11 04:00:00 +0000";
},
{
count = 1;
start = "2021-11-11 06:00:00 +0000";
},
{
count = 1;
start = "2021-11-12 00:00:00 +0000";
}
)
预期结果:
{
count = 2
start = 2021-09-14
}
{
count = 1
start = 2021-09-16
}
{
count = 3
start = 2021-11-11
}
{
count = 1;
start = "2021-11-12
}
【问题讨论】:
-
日志中的打印描述无关紧要。只需忽略您将要使用的时间组件
startDate -
我需要根据 startDate 没有 timeComponent 对事件进行分组,请查看预期结果以获得更清晰的结果
-
可以使用NSCalendar的
dateBySettingHour:minute:second:ofDate:options: -
对不起@Cy-4AH,但我不明白你的意思,实际上我希望 NSFetchRequest 返回预期结果,即按 start(withoutTimeComponents) 计数 + 开始组,我希望现在我已经清楚地问了我的疑惑
-
然后用
dateBySettingHour:minute:second:ofDate:options:删除时间组件。您可以创建只读属性,例如:startDateOnly
标签: objective-c core-data nsdate