如何检索匹配“max:”表达式的实体的其他属性

时间:2013-08-09 05:12:05

标签: ios core-data nsfetchrequest nsexpression

我有一个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匹配的对象上返回另一个属性的值。换句话说,我想要为返回max:value的managedObject返回timestamp属性的值。如果我设置了这样的获取请求:

    NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"record"];
    request.resultType = NSDictionaryResultType;
    request.propertiesToFetch = @[expressionDescription, @"timestamp"];
    request.propertiesToGroupBy = @[@"timestamp"];

它为每个记录返回一个字典,该记录具有时间戳,而不是仅匹配最大值的记录的一个字典。知道我怎么能得到我追求的结果吗?

1 个答案:

答案 0 :(得分:1)

构造您的获取请求以返回您想要的项目(这可以是字典或托管对象)。而不是使用max表达式,只需将fetchLimit设置为1并添加排序描述符,以便返回具有distance的最大值的结果(因为它是结果集中的第一项)