[objective-c]结合 valueForKeyPath 的 NSPredicate 中的子查询时出现错误

发布时间: 2016/10/4 4:55:53
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我在core data中存储的时间段。每个时间段有 DateTime 称为结束日期属性。我想要的最大结束日期,这是前 ( < ) 所指明的日期。

Financial period

这是如何编写此使用子查询和 ValueForKeyPath:

NSString *keyPath = [NSString stringWithFormat:@"SUBQUERY(SELF, $x, $x.EndDate < %@).@max.EndDate", date];
IBFinPeriod *periodBeforeCurrentDate = [self.finperiod valueForKeyPath:keyPath];

然而,运行此代码时,出现运行时错误︰the entity IBFinPeriod is not key value coding-compliant for the key "SUBQUERY(SELF, $x, $x".'

我的代码有什么错误? 我需要以不同的方式指定子查询吗?

谢谢你的帮助!!

解决方法 1:

您可以使用与读取请求 fetchLimit 设置为 1 和降序排序描述符。

如果你坚持 valueForKeyPath: 首先将筛选的结果与 filteredArrayUsingPredicate: (选择日期之前记录直正向谓词与你 date ),然后简单地使用 @"@max.EndDate" 作为关键路径。

如果你需要整个对象,而不是只是日期,只是你的组进行排序︰

NSSet *periodsBeforeCurrentDate = [self.finperiod 
    filteredSetUsingPredicate:[NSPredicate predicateWithFormat:
       @"EndDate < %@", date]];
if (periodsBeforeCurrentDate.count) {
    *sort = [NSSortDescriptor sortDescriptorWithKey:@"EndDate" ascending:NO];
   NSArray *sortDescriptors = [NSArray arrayWithObject:sort];
   IBFinPeriod *lastPeriodBeforeCurrentDate =[[periodsBeforeCurrentDate 
       sortedArrayUsingDescriptors:sortDescriptors] objectAtIndex:0];
}

在我看来会更容易地去拿。

赞助商