Как я могу получить только 20 лучших объектов из основных данных - PullRequest
0 голосов
/ 23 сентября 2011

Мне нужно найти 20 объектов, которые последний раз просматривал пользователь (с отметкой даты).Каждый объект имеет свойство в базовой модели данных, называемое dateVisited.Когда пользователь просматривает конкретный объект, свойству dateVisited назначается текущая отметка даты.

Итак, у меня есть представление «Недавние», в котором отображаются 20 последних просмотренных объектов.В настоящее время я использую приведенный ниже код для извлечения и сортировки данных.

            [fetchRequest setEntity:[NSEntityDescription entityForName:@"object" inManagedObjectContext:self.moc]];
            predicate = [NSPredicate predicateWithFormat:
                                      @"objectNumber contains[cd] %@", searchTerm]; 

            [fetchRequest setPredicate:predicate];
            NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"dateVisited" ascending:NO];
            NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
            [fetchRequest setSortDescriptors:sortDescriptors];
            [sortDescriptors release];
            [sortDescriptor release];

            NSFetchedResultsController *controller = [[NSFetchedResultsController alloc]
                                                      initWithFetchRequest:fetchRequest
                                                      managedObjectContext:self.moc
                                                      sectionNameKeyPath:nil
                                                      cacheName:nil];
            [fetchRequest release];

Код возвращает набор из 3000 объектов по порядку, и я отображаю первые 20. Однако он сортирует все 3000 объектов итребуется время, чтобы сделать это.Было бы намного эффективнее, если бы сортировка отслеживала только 20 встреченных «верхних» объектов и отбрасывала каждый из них по пути, если бы этот объект уже не входил в топ-20 встреченных до сих пор.

Так что мой вопросзаключается в следующем: есть ли способ сделать выборку / сортировку, которая отслеживает только запущенные топ-20 объектов?

1 Ответ

5 голосов
/ 23 сентября 2011
[fetchRequest setFetchLimit:20];

Ура! * * 1002

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...