我需要找到用户最近查看的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个对象?
答案 0 :(得分:5)
[fetchRequest setFetchLimit:20];
干杯!