Выборки Core Data (NSFetchRequest) сортируются каким-либо определенным способом по умолчанию? - PullRequest
2 голосов
/ 20 мая 2009

У меня есть основной вопрос. Скажем, у вас есть NSFetchRequest, который вы хотите выполнить для NSManagedObjectContext. Если в запросе на выборку не заданы явные дескрипторы сортировки, будут ли объекты каждый раз случайными или они будут выдаваться в массив в том порядке, в котором они были первоначально добавлены в контекст управляемого объекта? Я не могу найти этот ответ в документации.

Ответы [ 4 ]

3 голосов
/ 20 мая 2009

Нет, заказывать их не гарантируется. Может случиться, что вы увидите последовательное упорядочение в зависимости от того, какой тип хранилища данных вы используете (я никогда не пробовал), но это не то, от чего вы должны зависеть.

Легко заказать по дате создания. Просто добавьте атрибут даты к вашей сущности, инициализируйте его текущей датой в awakeFromInsert и укажите этот дескриптор сортировки в своей выборке.

0 голосов
/ 09 декабря 2012

На заказ нет гарантии. Например, я мог бы реализовать NSAtomicStore или NSIncrementalStore, который возвращает результаты в случайном порядке, и это было бы полностью правильно. Я видел, как хранилище SQLite возвращало разные порядки в разных версиях операционной системы.

0 голосов
/ 02 августа 2009

Здесь я вижу два вопроса: будет ли он каждый раз появляться в одном и том же порядке? И это заказ на вводе заказа?

Он выходит в установленном порядке, который находится в некотором порядке. Обратите внимание, что NSSet - это просто интерфейс, и существуют частные классы, которые реализуют NSSet. Это означает, что в то время как некоторые экземпляры NSSet возвращаются, если вы вызываете allObjects против него, они могут возвращать их в некотором непротиворечивом порядке, почти наверняка в порядке хеширования, поскольку наборы почти повсеместно реализуются как хешированные словари.

Поскольку алгоритм хеширования сильно варьируется в зависимости от того, что хранится и как он хешируется, вы можете «повезти», что он каждый раз выходит в одном и том же порядке, но затем застать врасплох в другой раз, когда что-то очень мало меняется .

Итак, технически это не совсем случайно и может быть в некотором стабильном порядке.

На второй вопрос я бы сказал, что он почти наверняка НЕ в порядке вставки.

Предложение Марка для обработки awakeFromInsert - хорошее, и то, что вы хотели бы.

0 голосов
/ 20 мая 2009

Порядок не может быть "случайным каждый раз", но, насколько я знаю, вы не можете / не должны зависеть от него. Если вам нужен определенный порядок, используйте дескрипторы сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...