#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. Базовая реализация, скорее всего, использует определенный дополнительный столбец для хранения информации о заказе.