【发布时间】:2016-07-13 09:45:04
【问题描述】:
有没有办法在CoreData中查询NSDate。例如,如果我想要一个具有 highest NSDate 值的实体?我看到 NSExpression "max:" 只需要一个 NSNumber。
【问题讨论】:
-
你想要一个实体的最大日期的 fech 对象?
标签: ios objective-c core-data nsdate
有没有办法在CoreData中查询NSDate。例如,如果我想要一个具有 highest NSDate 值的实体?我看到 NSExpression "max:" 只需要一个 NSNumber。
【问题讨论】:
标签: ios objective-c core-data nsdate
您可以直接在 SQLite 中执行此操作——无需获取所有内容然后过滤结果,也没有NSExpression 的复杂性。
要获取具有最大日期的一个对象,请执行以下操作(假设实体名称 Entity 和日期属性 timeStamp):
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Event"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"timeStamp = self.@max.timeStamp"];
fetchRequest.predicate = predicate;
进行抓取。您将(最多)得到一个结果,这将是具有最大日期的实例。
如果您只想获取日期而不是整个托管对象,请在获取之前添加:
fetchRequest.resultType = NSDictionaryResultType;
fetchRequest.propertiesToFetch = @[ @"timeStamp" ];
【讨论】:
您实际上可以只向 SQL 询问该值,而不是具有该值的对象:
NSExpression *date = [NSExpression expressionForKeyPath:@"date"];
NSExpression *maxDate = [NSExpression expressionForFunction:@"max:"
arguments:[NSArray arrayWithObject:maxDate]];
NSExpressionDescription *d = [[[NSExpressionDescription alloc] init] autorelease];
[d setName:@"maxDate"];
[d setExpression:maxSalaryExpression];
[d setExpressionResultType:NSDateAttributeType];
[request setPropertiesToFetch:[NSArray arrayWithObject:d]];
NSError *error = nil;
NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error];
if (objects == nil) {
// Handle the error.
} else {
if (0 < [objects count]) {
NSLog(@"Maximum date: %@", [[objects objectAtIndex:0] valueForKey:@"maxDate"]);
}
}
获取托管对象下的更多详细信息 -> CoreData 文档中的获取特定值。
或
执行查询,按日期字段 DESCENDING 排序,并使用 setFetchLim it:1。 它并不完美,但至少它有效。
【讨论】:
你可以得到它
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"tablename"];
fetchRequest.fetchLimit = 1;
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"yourDate" ascending:NO]];
NSError *error = nil;
id person = [managedObjectContext executeFetchRequest:fetchRequest error:&error].firstObject;
【讨论】: