如何使用大型核心数据集实现更快速的搜索

时间:2012-04-24 02:02:36

标签: objective-c ios

我正在开发应用程序,我希望用10k +显示一个tableview,我正在使用来自cs193p的fetchedresultcontroller,它运行良好。加载和滚动非常快。我希望能够用每个字母搜索 我设置了搜索栏和代理,并使用searchbar textdidchange方法重新加载每个字母的fetchresults控制器。它有效,但有延迟是为了让它更快。 这是我的textdidchange方法

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {

//NSLog(@"%@",searchText);
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"People"];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"fullname" ascending:YES]];
[NSFetchedResultsController deleteCacheWithName:@"peopleCache"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(firstname contains[c] %@)",searchText];
 request.predicate = predicate;

self.fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:request managedObjectContext:self.peopleDatabase.managedObjectContext sectionNameKeyPath:nil cacheName:@"actorCache"];  

}

有没有办法在不实际重新获取数据的情况下过滤现有查询?

任何建议都将不胜感激!

2 个答案:

答案 0 :(得分:1)

Optimizing Core Data Performance on iPhone OS”WWDC会话中提到了优化文本搜索的技巧。

答案 1 :(得分:0)

你可以搜索带有谓词的现有数组,但它可能会在你正在搜索的所有字段中出错...这取决于应用程序可能是一件坏事(即更慢和更多的内存使用只是反思)。