【问题标题】:How to implement a faster search with large core data set如何使用大型核心数据集实现更快的搜索
【发布时间】:2012-04-24 02:02:36
【问题描述】:

我正在开发应用程序,我想显示一个 10k+ 的 tableview 我正在使用来自 cs193p 的 fetchedresultcontroller,它运行良好。加载和滚动非常快。我希望能够搜索每个字母。
我设置了搜索栏和委托,并让搜索栏 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"];  

}

有什么方法可以过滤现有查询而不实际重新获取数据?

任何建议将不胜感激!

【问题讨论】:

    标签: objective-c ios


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。该视频非常有帮助,我将尝试实施一些建议。我尝试将 setFetchBatchSize 设置为 50,但是当我在仪器中运行它时,我仍然可以获得 20k 次获取。不知道为什么会这样。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-08-04
      • 1970-01-01
      • 2020-03-23
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多