如何检索与“max:”表达式匹配的实体的其他属性
Posted
技术标签:
【中文标题】如何检索与“max:”表达式匹配的实体的其他属性【英文标题】:How do I retrieve additional properties for entity matching "max:" expression 【发布时间】:2013-08-09 05:12:04 【问题描述】:我有一个 fetchRequest 可以正确返回特定键路径的最大值。设置看起来像这样:
NSExpression *keyExpression = [NSExpression expressionForKeyPath:@"distance"];
NSExpression *functionExpression = [NSExpression expressionForFunction:@"max:" arguments:@[keyExpression]];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:keyPath];
[expressionDescription setExpression:functionExpression];
[expressionDescription setExpressionResultType:NSInteger32AttributeType];
问题是我还需要返回与上述 NSExpressionDescription 匹配的对象上另一个属性的值。换句话说,我想要为 managedObject 返回的时间戳属性的值,从中返回 max: 值。如果我这样设置获取请求:
NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"record"];
request.resultType = NSDictionaryResultType;
request.propertiesToFetch = @[expressionDescription, @"timestamp"];
request.propertiesToGroupBy = @[@"timestamp"];
它为每个具有时间戳的记录返回一个字典,而不是只为匹配最大值的记录返回一个字典。知道如何获得我想要的结果吗?
【问题讨论】:
【参考方案1】:构造您的获取请求以返回您想要的项目(这可以是字典或托管对象)。而不是使用最大表达式,尽管只需将 fetchLimit
设置为 1 并添加一个排序描述符,以便返回具有最大值 distance
的结果(因为它是结果集中的第一项)。
【讨论】:
谢谢韦恩。这不是一个坏方法,但我希望使用 NSExpressionDescription。到目前为止,我能够使其与 NSExpressionDescription 一起工作的唯一方法是让它返回 objectID 以及最大值,然后调用 existingObjectWithID: 来返回我想要的值。不确定还有其他方法可以解决这个问题,但我很想在这个问题上犯错! 为什么要保留表达式? 我有一个通用方法,通常只返回最大值,但希望该选项也返回最大值来自的对象的关联时间戳。 不使用表达式仍然会得到最大值。以上是关于如何检索与“max:”表达式匹配的实体的其他属性的主要内容,如果未能解决你的问题,请参考以下文章
NSPredicate 用于检查与其他变量匹配的 CoreData 属性是不是满足条件