我正在使用NSFetchRequest来获取一些项目,这些项目可以按热门或随机排序。
按照指南,我可以使用NSSortDescriptor轻松按人气排序项目。
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"popularity" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
但我如何随机排序呢?
答案 0 :(得分:5)
是否存在“随机排序”这样的事情?
如果您想随机置换通过NSFetchedResultsController
获得的结果的显示,请记住您正在根据对控制器获取结果中元素的indexPath
引用来填充表视图({{1 }})。
因此,您可以做的一件事是对索引路径的-objectAtIndexPath:
(或数组)进行洗牌,编写将索引路径映射到置换索引路径的方法。此方法将索引路径作为输入,查找数组(或数组)并将新索引路径作为输出吐出。您可以使用此新索引路径填充表视图。
或者,您可以向NSMutableArray
实体添加randomizerTag
属性。您可以使用任何排列函数生成整数Item
的排列,并将这些数字保存到商店中的每条记录中。保存后,您可以重新获取,应用排序描述符,对您记录的{ 1 ... n }
值进行排序。
答案 1 :(得分:2)
我认为您需要使用随机属性创建对象,然后按此排序。
答案 2 :(得分:2)
您可以抓取您的对象,将它们放在NSMutableArray
中,并将其随机播放,如下所述: