4

我正在使用下面的代码使用与搜索条件匹配的 CoreData 获取一组查询的所有行:itemType = 1。但我需要做的是从数据中获取特定数量的随机行。例如,我不需要检索列名 dataType = 1 的所有 100 行数据,而是需要随机获取 dataType = 1 的 25 行。我希望有一个相对轻松的解决方案。任何帮助表示赞赏。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];
4

2 回答 2

5

您实际上无法获取随机行。一个合理的随机化策略可能是获取与谓词匹配的所有对象,然后随机选择特定数量的对象。

无论如何,您可以使用以下方法NSFetchRequest

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

基本上,setFetchLimit允许您定义要获取的行数(在您的情况下,您将限制设置为 25),同时setFetchOffset定义将开始返回行的偏移量(fetchOffset有关详细信息,请参阅属性的文档)。

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

于 2010-09-20T16:55:22.883 回答
-3

您也可以使用参考方法。当您按观看次数排序时。我很久以前就发布过:http ://www.alterplay.com/ios-dev-tips/2010/06/fetch-random-record-with-coredata.html 抱歉格式化。从 Blogger 切换到 Wordpress 后它坏了。

于 2011-12-14T20:37:42.033 回答