如何使用CoreData随机排序

时间:2010-01-14 08:52:56

标签: iphone objective-c sorting core-data

我正在使用NSFetchRequest来获取一些项目,这些项目可以按热门或随机排序。

按照指南,我可以使用NSSortDescriptor轻松按人气排序项目。

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

但我如何随机排序呢?

3 个答案:

答案 0 :(得分:5)

是否存在“随机排序”这样的事情?

如果您想随机置换通过NSFetchedResultsController获得的结果的显示,请记住您正在根据对控制器获取结果中元素的indexPath引用来填充表视图({{1 }})。

因此,您可以做的一件事是对索引路径的-objectAtIndexPath:(或数组)进行洗牌,编写将索引路径映射到置换索引路径的方法。此方法将索引路径作为输入,查找数组(或数组)并将新索引路径作为输出吐出。您可以使用此新索引路径填充表视图。

或者,您可以向NSMutableArray实体添加randomizerTag属性。您可以使用任何排列函数生成整数Item的排列,并将这些数字保存到商店中的每条记录中。保存后,您可以重新获取,应用排序描述符,对您记录的{ 1 ... n }值进行排序。

答案 1 :(得分:2)

我认为您需要使用随机属性创建对象,然后按此排序。

答案 2 :(得分:2)

您可以抓取您的对象,将它们放在NSMutableArray中,并将其随机播放,如下所述:

What's the Best Way to Shuffle an NSMutableArray?