Упорядоченные записи CoreData

#iphone #objective-c #cocoa-touch #core-data

#iPhone #objective-c #cocoa-touch #core-данные

Вопрос:

Насколько я знаю, CoreData не сохраняет порядок записей по мере их добавления. Итак, если мы хотим сохранить массив объектов в CoreData, мы должны добавить поле типа OrderID к объекту и заполнить его вручную. Но похоже, что в базовой базе sqlite хранится индекс для записей, так что, может быть, есть способ сохранить упорядоченные объекты без добавления дополнительного поля?

Ответ №1:

Короткий ответ: НЕТ. Длинный ответ:

  • для сохранения порядка необходимо сохранить информацию о заказе. Это может быть неявным, используя дескриптор сортировки для существующего свойства, как предложил Шиши. Или вы можете добавить новое свойство с явной целью поддержания порядка сортировки в экземплярах.

  • SQLite поддерживает неявный первичный ключ rowId, если он не определен клиентским кодом. Но если клиентский код определяет целочисленный первичный ключ, SQLite будет использовать его в качестве идентификатора строки. Другими словами, нет никакого преимущества в пространстве или времени, чтобы пытаться быть умным и использовать rowId SQLite. Обратите внимание, что вы можете указать Core Data, что ваше свойство должно быть проиндексировано. Основные данные могут определять или не определять другой первичный ключ.

  • Попытка зависеть от того, как Core Data реализует свое постоянное хранилище, — это ** BAAAAD ** идея: ваш код нарушит совместимость с другими хранилищами, прошлыми, настоящими или будущими, и, вероятно, выйдет из строя с будущим обновлением.

  • Возможно, вы заметили, что Core Data теперь поддерживает упорядоченные отношения с Mac OS X Lion или iOS 5. Базовая реализация, скорее всего, использует определенный дополнительный столбец для хранения информации о заказе.