【问题标题】:How to sort randomly with CoreData如何使用 CoreData 随机排序
【发布时间】:2011-01-05 00:06:03
【问题描述】:

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

按照指南,我可以使用 NSSortDescriptor 轻松按受欢迎程度对项目进行排序。

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

但是如何随机排序呢?

【问题讨论】:

    标签: iphone objective-c sorting core-data


    【解决方案1】:

    是否存在“随机排序”之类的东西?

    如果您想随机排列通过NSFetchedResultsController 获得的结果的显示,请记住,您正在根据对控制器获取结果中的元素的indexPath 引用填充表视图 (-objectAtIndexPath:)。

    因此,您可以做的一件事是将索引路径的NSMutableArray(或数组)打乱,编写一个将索引路径映射到置换索引路径的方法。此方法将索引路径作为输入,查找数组(或多个数组)并输出新的索引路径作为输出。您可以使用这个新的索引路径来填充您的表格视图。

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

    【讨论】:

    • 哈哈“随机排序”听起来很矛盾。但是,是的,我真正想要的是一种随机的。建议1听起来像是一种方法。但是在将索引路径映射到 fetchedResults 时,我确实遇到了来自 tableview 的奇怪行为。反正我会试试的。建议2是一个hackaround。我会尽量不碰我的实体属性。但如果一切都失败了,我会试试这个。
    【解决方案2】:

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

    【讨论】:

    • 关于如何创建随机属性的任何指南?这不是用随机数创建一个 int 属性,对吧?
    【解决方案3】:

    您可以获取您的对象,将它们放入 NSMutableArray,然后将其随机播放,如下所述:

    What's the Best Way to Shuffle an NSMutableArray?

    【讨论】:

    • 我正在为 iPhone 的表使用 NSFetchedResultsController,所以我认为我不应该获取 fetchedObjects 并对其进行排序
    猜你喜欢
    • 1970-01-01
    • 2012-12-04
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2012-11-19
    • 2012-03-16
    • 2012-01-05
    相关资源
    最近更新 更多