使用 CoreData 获取最大值

Posted

技术标签:

【中文标题】使用 CoreData 获取最大值【英文标题】:Fetching a maximum value with CoreData 【发布时间】:2012-02-09 23:30:05 【问题描述】:

这是我第一次尝试使用 CoreData,但在从表中获取最大日期时遇到了一些问题。

这基本上就是我想要做的:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Radar" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"modifiedOn"];
NSExpression *maxDate = [NSExpression expressionForFunction:@"max:" arguments:[NSArray arrayWithObject:keyPathExpression]];

NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:@"maxDate"];
[expressionDescription setExpression:maxDate];
[expressionDescription setExpressionResultType:NSDateAttributeType];

[request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];

NSError *error = nil;
NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error];
if (objects == nil) 
    // Handle the error.

else 
    if ([objects count] > 0) 
        NSLog(@"%d", [objects count]);
        NSLog(@"MAx date: %@", [[objects objectAtIndex:0] valueForKey:@"modifiedOn"]);
    

此代码以某种方式与我想要的相反并打印最小日期。由于我刚刚开始使用 CoreData,很明显我做错了,但是什么?

【问题讨论】:

在这里查看第二个答案:***.com/questions/4789033/… @sho - 我使用您指出的答案中描述的技术让它工作,但是,官方文档使用我粘贴在问题上的代码。关于为什么这个几乎是文档中的代码副本的代码不起作用的任何想法?谢谢 【参考方案1】:

也许你应该尝试 NSLog [objects lastObject],而不是第一个?

【讨论】:

以上是关于使用 CoreData 获取最大值的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 获取给定值下属性的最大值

NSPredicate 中 NSString 的问题

自定义获取比较器

如何正确使用 Core Data 验证和错误框架?

通过 Core Data 查询 max、min 等

watchOS 2 的最大内存使用量?