Сортировать NSFetchRequest по дате, а затем по алфавиту - PullRequest
12 голосов
/ 07 февраля 2012

Я хочу заказать 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 хранит в Базовых данных дату, а также час.Так что, даже если в тот же день, не отсортированы по «имени» в тот же день, потому что время отличается.Так как мне сохранить в основных данных только дату мм / дд / гггг, а не де час из UIDatePicker?

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

Ответы [ 2 ]

6 голосов
/ 08 июля 2015

Используйте блок компаратора для сортировки даты, чтобы преобразовать дату в строку в формате 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];
0 голосов
/ 21 мая 2014

CoreData поддерживает NSDate, но всегда будет включать час. Единственное, о чем я могу думать, - это иметь собственное свойство только для чтения, в котором есть отметка времени без часов, а затем создать дескриптор сортировки для этого свойства.

...