Вы думаете о базовых данных как о SQL. Большая ошибка.
Объекты не являются таблицами, а экземпляры не являются записями. Каждый экземпляр является своим собственным объектом, поэтому вам нужно изменить их индивидуально. В противном случае не было бы особого смысла в использовании графа объектов.
Edit01:
Как бы тогда
Вы решаете следующую проблему с пользовательским интерфейсом:
Вы хотите представить таблицу лиц
лица, упорядоченные по «имени». НО ...
пользователь может переупорядочить человека
лица, показанные в этой таблице И вы
хочу, чтобы упорствовал, чтобы
сущности теперь сортируются по «имени» +
"displayOrder" (или что вы хотите
называть это). Где вы поддерживаете
значение "displayOrder", если не как
атрибут личности лица?
О, я вижу, что вы пытаетесь сделать. Ты делаешь это намного сложнее, чем должно быть. Базовые данные легко справляются с этим типом функции.
Порядок сортировки не является (обычно см. Ниже ) фасетами модели данных, а скорее контроллером представления, т. Е. Это просто временные заказы, используемые для осмысленного отображения данных пользователю. Как таковые они создаются на лету по мере необходимости. В этом случае вы должны создать NSSortDescriptor / s для сортировки по ключам атрибутов, которые вы хотите. Затем установите запрос на выборку, чтобы использовать эти дескрипторы сортировки. Тогда ваша выборка вернет массив с элементами в нужном порядке.
Без суеты, без суеты.
Если пользователь хочет другой порядок сортировки, просто создайте другую группу дескрипторов сортировки. Нет смысла включать логику сортировки в саму фактическую модель данных, и есть много причин, чтобы этого не делать.
Отделение фактических данных от дисплея очень важно в шаблоне проектирования Model-View-Controller на всех основах API iPhone. Вы не хотите включать логику отображения в модель данных и не хотите хранить данные или иметь логику манипулирования данными на дисплее.
Edit02:
В моем случае пользователи должны иметь возможность
вернуться к заявке, посмотреть
таблица и увидеть лица лиц
в том порядке, в котором они их ставят. Как еще
Вы можете сделать это, кроме как имея
Атрибут displayOrder?
Если вы хотите сохранить заказ как пользовательские данные, вам необходимо включить его в модель данных.
По стечению обстоятельств, у меня просто была такая потребность. Вот как я справился с проблемой для небольшого числа объектов. Это методы подкласса NSMangedObject. Это работает для нескольких сотен легких объектов.
Если у вас есть большое количество тяжелых объектов (тысяч), я предлагаю создать легкий объект для реализации связанного списка. Назовите это OrderEntity. Он будет иметь атрибут индекса, отношение к индексируемому объекту, отношение к предыдущему OrderEntity и отношение к следующему. (Использование облегченного объекта избавляет вас от необходимости разбивать тяжелые объекты, что экономит память и ускоряет все. Вы должны сбивать с индексации индексируемый объект только тогда, когда вам нужно его отобразить.)
Затем вы используете стандартные методы связанного списка для вставки, обмена и перемещения элементов в списке. Затем вы вызываете update для перемещенных объектов, и они вызывают все последующие OrderEntities для обновления своих индексов.
Это может быть так же просто, как иметь метод, который вызывает следующий OrderEntity, передает текущий индекс объекта и сообщает следующему установить его порядок на значениеInIndex + 1. По сути, это та же функция, что и в SQL-выражении, которое вы хотите имитировать (потому что, конечно, логика та же.)
Если вам приходится много делать, создайте подкласс NSManagedObject для обработки индексации и затем наследуйте ваши индексированные классы от этого.