我的实体中有一些数据。如何以随机顺序获取所有条目。即我想一次又一次地洗牌。
我在这里找到了这个问题的解决方案:Shuffling the results from an NSFetchedResultsController。但我想得到NSFetchedResultsController
结果。有任何想法吗?也许使用NSPredicate
或NSSortDescriptor
?
答案 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