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
?
或者您是否考虑过任何其他解决方案?
使用比较器块进行日期排序,将日期转换为格式为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)