从CoreData获取随机行的特定数

问题描述:

我正在使用以下代码来使用CoreData匹配搜索条件来获取所有行的查询集:itemType = 1 但是我需要做的是获取一个特定的数字来自数据的随机行。 例如,我不需要检索列名为dataType = 1的所有100行数据,而是需要随机获取25行,其中dataType = 1. 我希望有相对无痛的解决方案。 任何帮助表示赞赏。 LQ从CoreData获取随机行的特定数

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 

[request setEntity:[NSEntityDescription entityForName:@"MyAppName" 
        inManagedObjectContext:[self managedObjectContext]]]; 

NSError *error = nil;           
NSPredicate *predicate; 
NSArray *fetchResults; 
predicate = [NSPredicate predicateWithFormat:@"(itemType = %i)", 1];    
[request setPredicate:predicate]; 
fetchResults = [managedObjectContext executeFetchRequest:request error:&error]; 

if (!fetchResults) { 
     // NSLog(@"no fetch results error %@", error); 
} 

self.mutableArrayName = [NSMutableArray arrayWithArray:fetchResults]; 
[request release]; 

你不能真正获取随机行。一个合理的随机化策略可能是获取与谓词匹配的所有对象,然后随机选择特定数量的对象。

反正你可以使用NSFetchRequest以下方法:

- (void)setFetchLimit:(NSUInteger)limit 
- (void)setFetchOffset:(NSUInteger)limit 

基本上,setFetchLimit允许你定义你想如何抓取几行(在你的情况,你会限量25),而setFetchOffset定义行将开始返回的偏移量(有关详细信息,请参阅fetchOffset属性的文档)。

这不是一个随机过程,但可以随机生成偏移量。但是,这里值得注意的是,根据偏移量,您可以获取介于零和您的提取限制之间的多个对象。

您也可以使用参考方法。当按视图计数排序时。 我很久以前发布了它:http://www.alterplay.com/ios-dev-tips/2010/06/fetch-random-record-with-coredata.html 对不起,格式化。它从Blogger切换到Wordpress后被破坏。

+0

难道你不能解决这个问题,否则就把它拿下来? – ardochhigh 2012-12-21 21:17:58

+1

链接断了,所以我低估了它。 – 2015-01-06 14:26:10