Как я могу сохранить упорядоченный список в основных данных - PullRequest
8 голосов
/ 06 января 2012

Я пишу метод API, который возвращает список объектов из веб-службы.Эта служба также кэширует результаты и пытается вернуть кэшированные результаты (если они есть) перед повторным обращением к веб-службе.Поэтому я храню этот список в сущности Core Data.Но Базовые Данные позволяют только сохранить отношения в NSSet, который не сохраняет порядок.Но я хочу, чтобы кэшированные результаты сохранили исходный порядок (который был первоначально из веб-службы).Я не обязательно знаю, как устанавливается этот порядок (поэтому я не могу отсортировать).

Так как я могу сохранить этот порядок?Мой план состоит в том, чтобы сохранить строку с идентификаторами объектов, которые я позже смогу использовать для их заказа:

NSString *objectIds = @"1 5 2 9 4";

Это лучший способ сделать это?

Ответы [ 3 ]

10 голосов
/ 06 января 2012

Если вы можете использовать iOS 5, тогда вы можете использовать новую функцию NSOrderedSet для произвольно упорядоченных отношений Core Data.См. Примечания к выпуску Core Data для iOS 5 для получения дополнительной информации об этой новой функции.

Если вам требуется поддержка iOS 4, вам придется самостоятельно оформить заказ.Распространенный способ сделать это - добавить целочисленное свойство к вашей модели, которым вам нужно управлять самостоятельно.Затем вы можете отсортировать это свойство при извлечении данных.

Сохранение порядка в совершенно другой строке кажется неправильным способом сделать это.Если порядок важен, эта информация должна быть в модели, и пользователь должен иметь возможность запросить ее напрямую («дайте мне первые пять объектов этого конкретного списка» или «каков индекс объекта foo»).Необходимость получить строку идентификаторов объектов, разобрать ее, а затем запросить определенные идентификаторы объектов для меня очень неправильно.

2 голосов
/ 06 января 2012

Включите собственное поле идентификатора NSNumber в модель CoreData, в которой вы храните объекты. Идентификатор будет представлять порядок, который вы хотите сохранить; Вы должны будете установить это самостоятельно, очевидно. Затем, когда вы выбираете объекты из CoreData, вы можете отсортировать их по этому идентификатору. Возможно, вы захотите / должны поддерживать где-то наивысшее значение идентификатора, назначенное вами для правильного сохранения порядка при последующих вызовах веб-службы и запуске приложений.

1 голос
/ 06 января 2012

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

...