我使用NSFetchedResultsController和NSSortDescriptor成功排序到表中,每个日期都有一个部分,以便今天的日期首先出现(降序日期顺序)。
但是,在该部分中,我希望时间按升序排序。
这是我当前的代码,没有按时间排序:
//Set up the fetched results controller.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:kEntityHistory inManagedObjectContext:global.managedObjectContext];
fetchRequest.entity = entity;
// Sort using the timeStamp property..
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
fetchRequest.sortDescriptors = sortDescriptors;
//The following is from:
//http://stackoverflow.com/questions/7047943/efficient-way-to-update-table-section-headers-using-core-data-entities
NSString *sortPath = @"date.dayDate";
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:global.managedObjectContext sectionNameKeyPath:sortPath cacheName:nil];
fetchedResultsController.delegate = self;
如何更改代码以在此日期部分中按时间升序添加排序?
答案 0 :(得分:3)
我认为你需要一个特殊的比较器。使用initWithKey:ascending:comparator:初始化排序描述符,并作为比较器传递:
^(id obj1, id obj2) {
NSDateComponents *components1 = [[NSCalendar currentCalendar] components:NSHourCalendarUnit|NSDayCalendarUnit fromDate:obj1];
NSInteger day1 = [components1 day];
NSInteger hour1 = [components1 hour];
NSDateComponents *components2 = [[NSCalendar currentCalendar] components:NSHourCalendarUnit|NSDayCalendarUnit fromDate:obj2];
NSInteger day2 = [components2 day];
NSInteger hour2 = [components2 hour];
NSComparisonResult res;
if (day1>day2) {
res = NSOrderedAscending;
} else if (day1<day2) {
res = NSOrderedDescending;
} else {
if (hour1>hour2) {
res = NSOrderedDescending;
} else {
res = NSOrderedAscending;
}
}
return res;
}
这应该让你知道如何实现这一点,你需要添加分钟和秒组件,并处理小时,分钟和秒相等的情况。