Получить наименьшую дату объекта в CoreData

У меня та же проблема, что и с этим вопросом, но ответ @davedelong для меня не работает.

Следуя примеру Apple, для получения наименьшей даты в наборе объектов я получаю следующую ошибку

-[NSDate count]: unrecognized selector sent to instance

Я понимаю, что NSExpressionмакс: только поддержка NSArrays. Поэтому мне нужно другое решение.

@davedelong предложил использовать восходящий NSSortDescriptorи так я и сделал:

NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.entity = [NSEntityDescription entityForName:NSStringFromClass([GCSession class])
                                  inManagedObjectContext:self.objectContext];
fetchRequest.fetchLimit = 1;

NSSortDescriptor* sort = [[NSSortDescriptor alloc] initWithKey:@"startDate" ascending:YES];
fetchRequest.sortDescriptors = [NSArray arrayWithObject:sort];

GCSession* session = [[self.objectContext executeFetchRequest:fetchRequest error:nil] lastObject];

return session.startDate;

Проблема здесь в том, что session объект, возвращаемый из выборки, не похож на объект с наименьшим startDate, В моих тестах кажется, что он даже вернул самую новую дату, но она не кажется последовательной.

Я мог бы также получить каждый GCSession возражать и сортировать их, но это кажется излишним, особенно что GCSession будет увеличиваться в количестве, когда пользователи будут использовать приложение.

Изменить: тестовый проект, который демонстрирует ошибку в примере кода Apple.

1 ответ

Решение

Сортировка вступает в игру только после того, как вы получили объекты. Вы установили предел выборки, равный одному, а не предикаты, которые говорят, что выборка "захватить любой случайный одиночный объект GCSession". Одна выборка имеет массив длиной 1 элемент, затем сортирует ее, что бесполезно.

Если вы хотите использовать сортировку для нахождения минимума или максимума, вам нужно извлечь все объекты и затем отсортировать их. Удаление строки:

fetchRequest.fetchLimit = 1;

… Должен позволить коду работать.

Однако вы должны иметь возможность извлекать минимальные и максимальные значения с помощью выражений. Это своего рода базовая операция.

Изменить: посмотрите комментарии для более подробной информации, но пример Apple может работать, если вы измените хранилище резервных копий на SQL вместо XML

Другие вопросы по тегам