1

NSArrayコアデータから抽出されたものがあります。配列内のエンティティには、date(もちろんタイプの)属性がありますNSDate。私がしたいのはこれです:

  • 配列はテーブルビューで表示する必要があります。
  • 配列内のオブジェクトのセクションとそのタイトルは月です

たとえば、3つのオブジェクト(4月1日、4月3日、7月7日)がある場合、2つのセクションが必要です。-2012年4月(2 obj)-2012年7月(1 obj))。

このように配列を分割するにはどうすればよいですか?

4

1 に答える 1

1

サブクラスのメソッドであるはずのとNSFetchedResultsControllerカスタムを使用してみてください。sectionNameKeyPathNSManagedObject

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];

monthAsStringmanagedObjectサブクラスにメソッドを実装する必要があります。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;
 }
于 2012-10-20T20:33:11.583 に答える