Сортировка результатов NSFetchedResultsController по местоположению пользователя - PullRequest
6 голосов
/ 19 апреля 2010

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

Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «keypath distanceFromCurrentLocation не найден в сущности '

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

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

Спасибо!

Ответы [ 3 ]

3 голосов
/ 05 мая 2010

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

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

NSFetchedResultsController разделы локализованы отсортированы

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

1 голос
/ 19 апреля 2010

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

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

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

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

1 голос
/ 19 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...