2010-09-20 44 views
4

我正在使用以下代码来使用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]; 

回答

5

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

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

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

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

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