У меня есть приложение, которое содержит некоторые Местоположения в Базовых Данных, и я хочу показать их пользователю в порядке близости к местоположению пользователя. Я использую NSFetchedResultsController для обслуживания местоположений Табличному представлению. Я думал о создании виртуального метода доступа, который возвращает расстояние местоположения от пользователя, который был бы вычислен с помощью "глобального" CoreLocationManager, но это отказывает с причиной:
Завершение приложения из-за неперехваченного исключения 'NSInvalidArgumentException', причина: 'keypath distanceFromCurrentLocation, не найденный в объекте <Местоположение NSSQLEntity id=4>'
Я также даю пользователю опцию отсортировать в алфавитном порядке, таким образом, я предпочел бы его, если бы я сохранил NSFetchedResultsController, если это возможно.
Как я должен сделать это?
Спасибо!
Виртуальные аксессоры не будут работать в Core Data, если в сущности не определен временный атрибут. NSFetchedResultsController (и все другие операции с Core Data) просматривают граф сущностей, прежде чем они попытаются выполнить какую-либо операцию. Если виртуальное свойство не отображается в определении сущности, то NSFetchedResultsController сообщит, что такого атрибута не существует.
Вы хотите определить временный атрибут в сущности с именем distanceFromCurrentLocation
, и у вас должна быть возможность писать виртуальные аксессоры и видеть его NSFetchedResultsController.
Я попытался сделать то же самое - отсортировать результаты по расстоянию от места. Вот один из моих вопросов:
Данные ядра и расположение ядра
Оказалось, что вам нужно загрузить все местоположения в память, чтобы сравнить их. В итоге я использовал SQLite, который сложнее реализовать, но у меня гораздо меньше головной боли для такого рода функций.
Вероятно, это не тот ответ, который вам нужен, но если у вас большой набор данных, я бы порекомендовал SQLite. В итоге для меня это оказалось быстрее и легче.
Проблема (или отсутствующая функция) NSFetchedResultsController заключается в отсутствии возможности использовать временные атрибуты для порядка сортировки и пути ключа раздела.
Я тоже боролся с этим, так что это может вас заинтересовать:
NSFetchedResultsController разделы localized sorted
Я уверен, что вы могли бы использовать этот подход, если бы вы могли гарантировать ограниченный набор записей. Но мне бы очень хотелось увидеть более изощренное решение.