Получить определенное количество случайных строк из CoreData - PullRequest
4 голосов
/ 20 сентября 2010

Я использую приведенный ниже код для извлечения запрашиваемого набора всех строк с использованием CoreData, соответствующего критериям поиска: itemType = 1. Но мне нужно вместо этого извлечь определенное количество строк Random из данных.Например, вместо того, чтобы извлекать все 100 строк данных, в которых имя столбца dataType = 1, мне нужно случайным образом получить 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];

Ответы [ 2 ]

5 голосов
/ 20 сентября 2010

Вы не можете выбрать случайные строки. Разумной стратегией рандомизации может быть выборка всех объектов, соответствующих вашему предикату, а затем случайным образом выбрать определенное количество объектов.

В любом случае вы можете использовать следующие методы NSFetchRequest:

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

По сути, setFetchLimit позволяет вам определить, сколько строк вы хотите получить (в вашем случае вы установите ограничение на 25), тогда как setFetchOffset определяет смещение, при котором строки будут возвращаться (см. Документацию fetchOffset свойство для деталей).

Это не случайный процесс, но вы можете случайным образом сгенерировать смещение. Однако здесь стоит отметить, что, в зависимости от смещения, вы можете затем выбрать количество объектов, попадающих между нулем и вашим пределом выборки.

0 голосов
/ 15 декабря 2011

Вы также можете использовать эталонный подход. Когда вы сортируете по количеству просмотров. Я давно писал об этом: http://www.alterplay.com/ios-dev-tips/2010/06/fetch-random-record-with-coredata.html Извините за форматирование. он сломался после переключения с Blogger на Wordpress.

...