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

and*_*one 12 sorting iphone date uidatepicker nsfetchrequest

我想先按NSFetchRequest日期订购,然后如果它按名称匹配同一天的订单.我使用a UIDatePicker来获取日期并使用Core Data保存它

[self.managedObject setValue:self.datePicker.date forKey:self.keypath];
Run Code Online (Sandbox Code Playgroud)

并排序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];
Run Code Online (Sandbox Code Playgroud)

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

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

Joh*_*ine 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];
Run Code Online (Sandbox Code Playgroud)


Eim*_*tas 0

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