2012-04-24 43 views
1

我工作的应用,在那里我想显示用10k +我使用从cs193p fetchedresultcontroller一个的tableview和它工作得很好。加载和滚动非常快。我希望能够用每个字母进行搜索。
我安装搜索栏和代表,并与每个字母的搜索栏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"]; 

}

有什么办法来筛选现有查询,而不实际,重新获取数据?

任何建议将不胜感激!

回答

0

您可以通过与谓语现有阵列搜索,但它会在所有你通过搜索领域的可能故障......这取决于应用程序可能是一件坏事(即速度较慢,更多的内存使用那只是重新修改)。

1

技巧用于优化文本搜索在“Optimizing Core Data Performance on iPhone OS” WWDC会议上提及。

+0

感谢您的答复。该视频非常有帮助,我会尝试实施一些建议。我试图将setFetchBatchSize设置为50,但是当我在乐器中运行它时,仍然会获得20k次提取。不知道为什么会发生。 – Yan 2012-04-25 02:37:08