Вид NSFetchedResultsController заканчивается пользовательским местоположением

У меня есть приложение, которое содержит некоторые Местоположения в Базовых Данных, и я хочу показать их пользователю в порядке близости к местоположению пользователя. Я использую NSFetchedResultsController для обслуживания местоположений Табличному представлению. Я думал о создании виртуального метода доступа, который возвращает расстояние местоположения от пользователя, который был бы вычислен с помощью "глобального" CoreLocationManager, но это отказывает с причиной:

Завершение приложения из-за неперехваченного исключения 'NSInvalidArgumentException', причина: 'keypath distanceFromCurrentLocation, не найденный в объекте <Местоположение NSSQLEntity id=4>'

Я также даю пользователю опцию отсортировать в алфавитном порядке, таким образом, я предпочел бы его, если бы я сохранил NSFetchedResultsController, если это возможно.

Как я должен сделать это?

Спасибо!

6
задан cgp 19 April 2010 в 16:49
поделиться

3 ответа

Виртуальные аксессоры не будут работать в Core Data, если в сущности не определен временный атрибут. NSFetchedResultsController (и все другие операции с Core Data) просматривают граф сущностей, прежде чем они попытаются выполнить какую-либо операцию. Если виртуальное свойство не отображается в определении сущности, то NSFetchedResultsController сообщит, что такого атрибута не существует.

Вы хотите определить временный атрибут в сущности с именем distanceFromCurrentLocation , и у вас должна быть возможность писать виртуальные аксессоры и видеть его NSFetchedResultsController.

1
ответ дан 17 December 2019 в 04:44
поделиться

Я попытался сделать то же самое - отсортировать результаты по расстоянию от места. Вот один из моих вопросов:

Данные ядра и расположение ядра

Оказалось, что вам нужно загрузить все местоположения в память, чтобы сравнить их. В итоге я использовал SQLite, который сложнее реализовать, но у меня гораздо меньше головной боли для такого рода функций.

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

1
ответ дан 17 December 2019 в 04:44
поделиться

Проблема (или отсутствующая функция) NSFetchedResultsController заключается в отсутствии возможности использовать временные атрибуты для порядка сортировки и пути ключа раздела.

Я тоже боролся с этим, так что это может вас заинтересовать:

NSFetchedResultsController разделы localized sorted

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

3
ответ дан 17 December 2019 в 04:44
поделиться