【问题标题】:How do I retrieve additional properties for entity matching "max:" expression如何检索与“max:”表达式匹配的实体的其他属性
【发布时间】: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"];

它为每个具有时间戳的记录返回一个字典,而不是只为匹配最大值的记录返回一个字典。知道如何获得我想要的结果吗?

【问题讨论】:

    标签: ios core-data nsfetchrequest nsexpression


    【解决方案1】:

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

    【讨论】:

    • 谢谢韦恩。这不是一个坏方法,但我希望使用 NSExpressionDescription。到目前为止,我能够使其与 NSExpressionDescription 一起工作的唯一方法是让它返回 objectID 以及最大值,然后调用 existingObjectWithID: 来返回我想要的值。不确定还有其他方法可以解决这个问题,但我很想在这个问题上犯错!
    • 为什么要保留表达式?
    • 我有一个通用方法,通常只返回最大值,但希望该选项也返回最大值来自的对象的关联时间戳。
    • 不使用表达式仍然会得到最大值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多