按日期排序NSFetchRequest,然后按字母顺序排序

时间:2012-02-07 19:58:11

标签: iphone sorting date uidatepicker nsfetchrequest

我想先按日期订购NSFetchRequest,然后按名称匹配同一天的订单。 我使用UIDatePicker获取日期并使用Core Data

保存日期
[self.managedObject setValue:self.datePicker.date forKey:self.keypath];

并像这样对NSFetchRequest进行排序:

NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"day" ascending:NO];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, sortDescriptor2, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

现在我的问题是它只按日期排序,而不是按名称排序,因为核心数据中存储的UIDatePicker是日期,也是小时。因此,即使在同一天,由于小时不同,在同一天没有按“名称”排序。 那么如何在核心数据中仅保存日期mm / dd / yyyy而不是UIDatePicker的小时?

或者您是否考虑过任何其他解决方案?

2 个答案:

答案 0 :(得分:6)

使用比较器块进行日期排序,将日期转换为格式为yyyyMMdd的字符串。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyyMMdd"];
NSSortDescriptor *sortDescriptor1 = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO comparator:^NSComparisonResult(NSDate *obj1, NSDate *obj2) {
    return [[formatter stringFromDate:obj1] compare:[formatter stringFromDate:obj2]];
}];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, sortDescriptor2, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

答案 1 :(得分:0)

CoreData支持NSDate,但它始终包含小时。我能想到的唯一一件事就是拥有一个自定义的readonly属性,该属性包含一个没有小时数的时间戳,然后为该属性创建排序描述符。