NSArray
コアデータから抽出されたものがあります。配列内のエンティティには、date
(もちろんタイプの)属性がありますNSDate
。私がしたいのはこれです:
- 配列はテーブルビューで表示する必要があります。
- 配列内のオブジェクトのセクションとそのタイトルは月です
たとえば、3つのオブジェクト(4月1日、4月3日、7月7日)がある場合、2つのセクションが必要です。-2012年4月(2 obj)-2012年7月(1 obj))。
このように配列を分割するにはどうすればよいですか?
NSArray
コアデータから抽出されたものがあります。配列内のエンティティには、date
(もちろんタイプの)属性がありますNSDate
。私がしたいのはこれです:
たとえば、3つのオブジェクト(4月1日、4月3日、7月7日)がある場合、2つのセクションが必要です。-2012年4月(2 obj)-2012年7月(1 obj))。
このように配列を分割するにはどうすればよいですか?
サブクラスのメソッドであるはずのとNSFetchedResultsController
カスタムを使用してみてください。sectionNameKeyPath
NSManagedObject
fetchedResultsControllerは、次のように設定できます。
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"MyObject"];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES];
request.sortDescriptors = @[sortDescriptor];
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:managedObjectContext sectionNameKeyPath:@"monthAsString" cacheName:nil];
monthAsString
managedObjectサブクラスにメソッドを実装する必要があります。NSDateFormatterは、呼び出しごとに新しいインスタンスを割り当てるとうまく機能しないため、1回だけ割り当ててください。
- (NSString *)monthAsString {
static NSDateFormatter *formatter;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"MMMM yyyy";
});
NSString *dateString = [formatter stringFromDate:self.date];
return dateString;
}