2011-09-22 98 views
0

我需要查找用户最近查看(日期标记)的20个对象。每个对象在核心数据模型中都有一个名为dateVisited的属性。当用户查看特定的对象时,dateVisited属性被分配当前的日期标记。如何从核心数据中仅提取前20个对象

所以,我有一个'Recent'视图,显示了最近查看的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个对象?

回答

5
[fetchRequest setFetchLimit:20]; 

干杯!

+0

谢谢,这很好! –

相关问题