2015-08-12 4 views
0

Я конвертирую приложение для использования Core Data из ранее только находящихся в памяти объектов. Это приложение извлекает данные из удаленного API и ранее созданных объектов в памяти с инкрементирующим идентификатором, и я выяснил, в каком направлении он перемещался (поворачивая страницы), в зависимости от того, увеличивается ли этот увеличивающий ID. И основывается на этом заполненном контроллере детского представления (который предоставляется для PageViewController) с правильной информацией. Логика выбора объекта находилась в методе делегата didFinishAnimating pageViewController, потому что он был вызван только один раз на переход страницы.PageViewController: определение «следующего» и «предыдущего» при использовании Core Data

Теперь я храню некоторые объекты в Core Data, и мне нужно знать, что такое «следующий» и «предыдущий», чтобы правильно настроить следующий и предыдущий контроллеры представлений, которые подаются на экран PageViewControllers. Как и прежде, я получаю удаленный API, но теперь создаю объекты, управляемые основными данными, на основе данных, полученных из API.

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

В целом - как люди, использующие основные данные, могут использовать приложения PageViewController с динамической коллекцией объектов с потенциально отсутствующей «последней страницей»?

Примечание: этот проект написан в Свифт.

+0

Почему бы не просто сохранить ссылки на следующие и предыдущие объекты, тогда вы просто загрузите следующий или предыдущий объект в зависимости от направления, в котором движется пользователь. Они будут установлены как отношения в Core Data –

+0

Неплохая идея , Конечно, для предметов, которые уже видели, это вариант, трудность заключается в том, что пользователь может «прыгать» в разные части большого, по сути, неупорядоченного списка сторон сервера. Поэтому у меня были бы эти отдельные связанные серии объектов, и мне нужно решить, что делать, если они в конечном итоге перекрываются. Ядро проблемы заключается в том, что мои исходные данные неупорядочены, и я пытаюсь наложить порядок на него. Поэтому мне просто нужно переосмыслить весь мой подход, возможно, заранее заработав все метаданные. –

+0

Нет никакого способа обойти это. Вы хотели бы как-то отсортировать порядок объектов, вам нужно иметь поле для сортировки. Будь то objectID, createDate, itemOrder или что-то, что вам подходит, вам нужно будет сохранить это в базе данных. Остальное просто извлекает запись, используя дескриптор сортировки, и все готово. – Rog

ответ

0

Сохраните результаты в массиве. Передайте массив (и отображаемый объект) с одного контроллера представления на следующий (инъекция зависимостей). Контроллер вида может запросить у массива какой индекс объект находится и отрегулировать оттуда.

+0

Спасибо за вклад - тоже отличная идея. Проблема заключается в том, что массив всегда добавляется, так как результаты извлекаются из удаленного API и без API, дающих некоторый намек на упорядочение. Я не мог гарантировать, что путь пользователя будет таким же, как и в обратном направлении по мере продвижения вперед. Однако я нашел решение, которое я опишу в ответе, который я расскажу ниже. –

1

Оказывается, API, с которым я говорю (перечисление категории MediaWiki), может возвращать результаты в стиле timestamped - я могу использовать эти временные метки, чтобы определить, в каком направлении я иду. Итак, уроки из этого:

  • Посмотрите, какие средства удаленный API должен определить для упорядочения результатов; в этом случае хронологическое упорядочение соответствует счету.
  • Если результаты действительно не упорядочены и поступают из удаленного источника, вам придется применять какой-то локальный заказ, чтобы пейджинговая работа работала предсказуемо.
Смежные вопросы