我从核心数据中提取了NSArray
。数组中的实体具有date
属性(类型为NSDate
)。我想做的是:
例如,如果我有3个对象(4月1日,3月3日和7月7日),应该有2个部分: - 2012年4月(2 obj) - 2012年7月(1 obj))。
如何像这样拆分数组?
答案 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;
}