iOS では、日、月、年ごとにコア データ フィールドを合計しようとしてNSExpression
います。
ここに私のデータオブジェクトがあります:
data{
amount:NSNumber
date:NSDate
}
日、月、年ごとにデータをグループ化し、金額を合計します。
ありがとう。
iOS では、日、月、年ごとにコア データ フィールドを合計しようとしてNSExpression
います。
ここに私のデータオブジェクトがあります:
data{
amount:NSNumber
date:NSDate
}
日、月、年ごとにデータをグループ化し、金額を合計します。
ありがとう。
日付コンポーネントに一時属性を設定できます。これらをマネージド オブジェクト モデルに一時的に追加し、エンティティ サブクラスに追加する必要があります。それらは次のように計算できます。
-(NSNumber*)year {
NSCalendar *greg = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [greg components:NSYearCalendarUnit fromDate:self.date];
return @(comps.year);
}
日付の関連部分を原始的な数値形式 (例: 日) でキャプチャするスキームを考案することにより、月と日で同等のことを行います。
-(NSNumber*)day {
NSCalendar *greg = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [greg
components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
fromDate:self.date];
return @(comps.year*10000+comps.month*100+comps.day);
}
(上記のスキームでは、必要なのはこれだけです。ただし、明示的な属性year
とmonth
属性を使用すると、コードが読みやすくなります。 )
でグループ化すると、またはとしてNSFetchedResultsController
持つことができます。次のような述語でグループ化/フィルタリングすることもできます。year
day
sectionNameKeyPath
NSArray *dataFor2000 = [allData filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:@"year = %@", @2000]];
合計の計算は、キー パスを使用すると簡単です。
NSNumber *sum = [dataFor2000 valueForKeyPath:@"@sum.amount"];