Подтвердить что ты не робот

Сортировка NSFetchRequest по дате, а затем по алфавиту

Я хочу заказать a NSFetchRequest по дате и затем, если он совпадает с тем же порядком дня по имени. Я использую UIDatePicker, чтобы получить дату и сохранить ее с помощью Core Data​​p >

[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?

Или вы думаете о каком-либо другом решении?

4b9b3361

Ответ 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, которое имеет временную метку без учета часов, а затем создает дескриптор сортировки для этого свойства.