我正在使用以下代码使用符合搜索条件的CoreData获取所有行的查询集:itemType = 1。 但我需要做的是从数据中获取特定数量的随机行。 例如,我不需要检索列名为dataType = 1的所有100行数据,而是需要随机获取25行dataType = 1。 我希望有相对无痛的解决方案。 任何帮助表示赞赏。 LQ
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];
答案 0 :(得分:5)
您实际上无法获取随机行。合理的随机化策略可能是获取与谓词匹配的所有对象,然后随机选择特定数量的对象。
无论如何,您可以使用NSFetchRequest
的以下方法:
- (void)setFetchLimit:(NSUInteger)limit
- (void)setFetchOffset:(NSUInteger)limit
基本上,setFetchLimit
允许您定义要获取的行数(在您的情况下,您将限制设置为25),而setFetchOffset
定义将开始返回行的偏移量(有关详细信息,请参阅fetchOffset
属性的文档。
这不是随机过程,但您可以随机生成偏移量。但是,值得注意的是,根据偏移量,您可以获取介于零和读取限制之间的多个对象。
答案 1 :(得分:-3)
您也可以使用参考方法。按视图计数排序时。 我很久以前发过关于它的帖子:http://www.alterplay.com/ios-dev-tips/2010/06/fetch-random-record-with-coredata.html 抱歉格式化。从Blogger切换到Wordpress后,它已经坏了。