从CoreData获取特定的随机行数

Lau*_*ell 4 iphone xcode predicate core-data fetch

我正在使用下面的代码使用符合搜索条件的CoreData获取所有行的查询集:itemType = 1.但我需要做的是从数据中获取特定数量的Random行.例如,我不需要检索列名为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];
Run Code Online (Sandbox Code Playgroud)

Mas*_*aro 5

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

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

- (void)setFetchLimit:(NSUInteger)limit
- (void)setFetchOffset:(NSUInteger)limit
Run Code Online (Sandbox Code Playgroud)

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

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