iphone - 为什么我的 UISearchController 很慢?

标签 iphone ios core-data nspredicate uisearchresultscontroller

我有一个 UISearchResultsController,它正在过滤我的 NSFetchedResultsController 并将过滤后的数据放入一个数组中。目前,我使用 NSPredicate 获取搜索栏内容并应用过滤器。这是我的谓词:

[filteredArray removeAllObjets];
for(Account *account in unfilteredResults){
NSPredicate *predicate;

if(controller.searchBar.selectedScopeButtonIndex == 0){

  predicate = [NSPredicate predicateWithFormat:@"accountFirstName BEGINSWITH[cd] %@", searchString];
}else if(controller.searchBar.selectedScopeButtonIndex == 1){

  predicate = [NSPredicate predicateWithFormat:@"accountLastName BEGINSWITH[cd] %@", searchString];
}else if(controller.searchBar.selectedScopeButtonIndex == 2){

  predicate = [NSPredicate predicateWithFormat:@"group.groupName CONTAINS[cd] %@", searchString];
}

  if([predicate evaluateWithObject:account]){
    [self.filteredArray addObject:account];
  }
}

我正在尝试根据名字、姓氏或群组名称过滤帐户。我知道这些操作很慢,但如何才能使它们更快?

编辑:

我只是注意到我在每次迭代时都重新创建谓词,但我仍然认为应该有更好的方法。我确实在 Apple 视频中看到了一些关于进行二进制比较的内容,但我不知道如何将搜索字符串转换为二进制字符串,更不知道如何获得“下一个最大”值。

如何用更高效的语句替换 BEGINSWITH 语句?

最佳答案

我假设您的数据对象是 CoreData 对象,如果是这样,您是否将要搜索的属性标记为索引?

关于iphone - 为什么我的 UISearchController 很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6515443/

相关文章:

iphone - 减少应用程序大小超过50兆的最佳方法

ios - 如何使用 URL 方案在应用程序内打开社交应用程序登录

ios - 无法在启用 Storyboard自动布局的 iOS6 中执行自定义 UIButton

core-data - -primitiveValueForKey :? 有什么意义

cocoa - 核心数据: can NSFetchedResultsController fetch two different entities?

iphone - 如何将我的电子邮件文本字段值与 iPhone 中的数据库值进行比较

ios - iOS 中的沙盒是什么?我可以在一个应用程序与另一个应用程序之间传输数据吗?

ios - 如何使用 Stripe 获取卡号、CVV 和到期日期的单独文本字段

ios - 在 UIWebView 中使用 Backbone.js 路由器和 pushState

ios - 带有谓词/排序函数闭包的 NSFetchRequest