我想先按日期订购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
的小时?
或者您是否考虑过任何其他解决方案?
答案 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属性,该属性包含一个没有小时数的时间戳,然后为该属性创建排序描述符。