0

Core Data に期間を保存します。各期間には、DateTimeEndDate という属性があります。指定された日付( ) より前の最大終了日を取得しようとしてい<ます。

決算期

これは、サブクエリと 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

1に設定されたフェッチ要求とfetchLimit降順のソート記述子を使用できます。

あなたが主張するなら、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];
}

私の意見では、単にフェッチする方が簡単でしょう。

于 2012-07-26T10:03:01.970 に答える