OGeek|极客世界-中国程序员成长平台

标题: ios - 如何按日期降序对 NSDate 进行排序,但在该日期内时间升序? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 14:54
标题: ios - 如何按日期降序对 NSDate 进行排序,但在该日期内时间升序?

我使用 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;

请问如何更改代码以在此日期部分中按时间升序添加排序?



Best Answer-推荐答案


我认为您需要一个特殊的比较器。使用initWithKey:ascending:comparator:初始化您的排序描述符并作为比较器传递:

^(id obj1, id obj2) {
    NSDateComponents *components1 = [[NSCalendar currentCalendar] components:NSHourCalendarUnit|NSDayCalendarUnit fromDatebj1];
    NSInteger day1 = [components1 day];
    NSInteger hour1 = [components1 hour];

    NSDateComponents *components2 = [[NSCalendar currentCalendar] components:NSHourCalendarUnit|NSDayCalendarUnit fromDatebj2];
    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;
}

这应该让您了解如何实现这一点,您将需要添加分钟和秒组件,并处理小时、分钟和秒相等的情况。

关于ios - 如何按日期降序对 NSDate 进行排序,但在该日期内时间升序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11555912/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4