来自NSFetchedResultsController的随机结果

时间:2013-07-04 12:06:27

标签: ios core-data nspredicate nsfetchedresultscontroller nssortdescriptor

我的实体中有一些数据。如何以随机顺序获取所有条目。即我想一次又一次地洗牌。

我在这里找到了这个问题的解决方案:Shuffling the results from an NSFetchedResultsController。但我想得到NSFetchedResultsController结果。有任何想法吗?也许使用NSPredicateNSSortDescriptor

1 个答案:

答案 0 :(得分:3)

子类NSSortDescriptor以更改默认排序行为。这样的事情应该有效:

@interface RandomSortDescriptor : NSSortDescriptor 
@end

@implementation RandomSortDescriptor

- (id)copyWithZone:(NSZone*)zone
{
    return [[[self class] alloc] initWithKey:[self key] 
                           ascending:[self ascending] selector:[self selector]];
}

- (id)reversedSortDescriptor
{
    return [[[self class] alloc] initWithKey:[self key] 
                           ascending:![self ascending] selector:[self selector]];
}

- (NSComparisonResult)compareObject:(id)object1 toObject:(id)object2 
{
    NSUInteger random = arc4random_uniform(3);
    switch (random)
    {
       case 0:
          return NSOrderedSame
       case 1:
          return NSOrderedDescending;
       case 2:
          return NSOrderedDescending;
     }
}

@end