由NSDate将nsarray拆分为多个部分

时间:2012-10-20 20:07:32

标签: ios uitableview nsdate

我从核心数据中提取了NSArray。数组中的实体具有date属性(类型为NSDate)。我想做的是:

  • 数组需要以表格视图显示
  • 数组中对象的部分及其标题为月份

例如,如果我有3个对象(4月1日,3月3日和7月7日),应该有2个部分:   - 2012年4月(2 obj)   - 2012年7月(1 obj))。

如何像这样拆分数组?

1 个答案:

答案 0 :(得分:1)

尝试使用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];

您需要在managedObject子类中实现monthAsString方法。仅分配NSDateFormatter一次,因为如果为每个调用分配一个新实例,它将无法正常运行。

 - (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;
 }