如何从核心数据中仅获取前20个对象

时间:2011-09-22 22:33:55

标签: objective-c ios sorting

我需要找到用户最近查看的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];

代码按顺序返回3,000个对象的集合,然后显示前20个。但是,它会对所有3,000个对象进行排序,并且需要时间来完成。如果排序只跟踪了20个“顶部”遇到的对象,并且如果该对象已经不在目前为止遇到的前20个中,那么它将沿途丢弃。

所以我的问题是:有没有办法进行获取/排序,只跟踪正在运行的前20个对象?

1 个答案:

答案 0 :(得分:5)

[fetchRequest setFetchLimit:20];

干杯!