我有一个NSArray
从核心数据中提取的。数组中的实体有一个date
属性(当然是类型NSDate
)。我想做的是:
- 数组需要显示在表格视图中,
- 数组中对象的部分及其标题是months
例如,如果我有 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))。
如何像这样拆分数组?
尝试使用 aNSFetchedResultsController
和 custom 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,因为如果为每次调用分配一个新实例,它的性能将不会很好。
- (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;
}