Сортировка NSFetchRequest по дате, а затем по алфавиту
Я хочу заказать a NSFetchRequest
по дате и затем, если он совпадает с тем же порядком дня по имени.
Я использую UIDatePicker
, чтобы получить дату и сохранить ее с помощью Core Datap >
[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
хранится в Core Data дата, но также и час. Так что даже если в тот же день не отсортировано по "имени" в тот же день, потому что час другой.
Итак, как мне сохранить в основных данных только дату mm/dd/yyyy, а не час от UIDatePicker
?
Или вы думаете о каком-либо другом решении?
Ответы
Ответ 1
Используйте блок сравнения для сортировки даты, чтобы преобразовать дату в строку с форматом 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];
Ответ 2
CoreData поддерживает NSDate
, но всегда будет включать час. Единственное, о чем я могу думать, это иметь пользовательское свойство readonly, которое имеет временную метку без учета часов, а затем создает дескриптор сортировки для этого свойства.