0

我将时间段存储在 Core Data 中。每个时间段都有一个DateTime名为 EndDate 的属性。我正在尝试获取最大结束日期,即在 ( <) 指定日期之前。

财务期

这就是我使用子查询和 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".'

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

感谢您的帮助!!

4

1 回答 1

1

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

如果您坚持valueForKeyPath:I 将首先过滤结果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];
}

在我看来,只是获取会更容易。

于 2012-07-26T10:03:01.970 回答