Как сортировать в случайном порядке с CoreData - PullRequest
3 голосов
/ 14 января 2010

Я использую NSFetchRequest для извлечения некоторых элементов, которые могут быть отсортированы по Популярному или Случайному.

Следуя инструкциям, я легко сортировал элементы по популярности, используя NSSortDescriptor.

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"popularity" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];

Но как отсортировать их случайным образом?

Ответы [ 3 ]

5 голосов
/ 14 января 2010

Есть ли такая вещь, как "случайная сортировка"?

Если вы хотите случайным образом изменить отображение результатов, полученных с помощью NSFetchedResultsController, помните, что вы заполняете табличное представление на основе ссылки indexPath на элемент в полученных результатах вашего контроллера (-objectAtIndexPath:).

Итак, одну вещь, которую вы можете сделать, - это перемешать NSMutableArray (или массивы) путей индекса, написав метод, который отображает путь индекса к перестановочному пути индекса. Этот метод принимает путь индекса в качестве входных данных, ищет массив (или массивы) и выдает новый путь индекса в качестве выходных данных. Вы используете этот новый путь индекса для заполнения представления таблицы.

Кроме того, вы можете добавить атрибут randomizerTag к вашей сущности Item. Вы используете любую функцию перестановки для генерации перестановки целых чисел { 1 ... n } и сохранения этих чисел для каждой записи в вашем магазине. После сохранения вы можете выполнить повторную выборку, применив дескриптор сортировки, который сортирует значения randomizerTag ваших записей.

2 голосов
/ 14 января 2010

Вы можете получить ваши объекты, поместить их в NSMutableArray и перемешать, как описано здесь:

Каков наилучший способ перемешать массив NSMutableArch?

2 голосов
/ 14 января 2010

Я думаю, вам нужно создать свои объекты с рандомизированным свойством, а затем отсортировать их по этому.

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