NSFetchRequest без дескрипторов сортировки - PullRequest
5 голосов
/ 03 августа 2010

Мы не можем использовать NSFetchRequest без предоставления NSSortDescriptor (ов). Все, что я хочу сделать, это получить результаты и показать их в том порядке, в котором они были созданы. Есть ли встроенный способ сделать это? Или мне нужно будет создать новое поле «автоинкремент»? (что противоречит всему, что CoreData поддерживает, по моему мнению).

Ответы [ 3 ]

6 голосов
/ 04 августа 2010

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

Нет встроенного порядка для выборок, потому что каждый запрос выборки очень специфичен для потребностей представления, которое он помогает заполнить.NSFetchRequest требуется дескриптор сортировки, поскольку он возвращает массив и требует дескриптора сортировки, чтобы превратить неупорядоченные управляемые объекты в графе объектов в упорядоченный массив.

В управляемых объектах нет встроенного порядкаграф объектов в целом, потому что каждая модель данных имеет разные критерии для структурирования данных.Например, для большинства моделей временные последовательности, в которые вставляются объекты, не имеют значения.Зачем встраивать временную метку в каждый управляемый объект, который везде должно использовать каждое приложение Core Data, когда оно потребуется только в крошечном меньшинстве случаев?

Если временные последовательности являются важной частью логических отношений вашей модели, то есть они отражают реальные объекты, события или условия, которые моделирует модель данных, то , как предложил Джейсон Коко , вам следует добавитьатрибут timestamp для самой сущности, так что объекты сущностей будут моделировать время своего создания.

6 голосов
/ 03 августа 2010

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

Вы можете легко установить это в методе didAwakeFromInsert управляемого объекта.

1 голос
/ 24 августа 2016
[[NSSortDescriptor alloc] initWithKey:@"" ascending:NO];

В моем проекте я использую NSFetchRequest для извлечения списка, и все объекты в списке имеют свойство, которое имеет одинаковое значение. поэтому мы используем имя этого свойства "initWithKey:". Хорошо работает.

...