实现实时(在键入时搜索)联系人搜索的最佳方式?

时间:2009-11-18 23:08:55

标签: iphone search iphone-sdk-3.0

我正在尝试在我的iPhone应用中实现更好的直播(在您键入时搜索)联系人搜索。在做了一些真正的设备测试后,如果发现我的当前(非线程)实现太慢了。据我所知,iPhone没有聚光灯API。所以我认为解决方案必须是线程化的,以便每x秒更新一次结果而不是每次击键。有没有我可以构建的开源实现?

谢谢!

2 个答案:

答案 0 :(得分:1)

据我所知,iPhone没有聚光灯API。

你不需要一个。这是一种方法:

  1. 将您的联系人放入Core Data持久性商店
  2. 使用NSFetchedResultsController管理结果集
  3. 使用UISearchDisplayController实时在结果集上应用NSPredicate
  4. 我可以看到您需要的唯一线程是使用联系人填充Core Data存储的单独线程。

    通过NSFetchedResultsController获得结果集后,应用谓词非常容易。例如:

    if ([self.searchBar.text length]) {
        _predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(myContactName contains[cd] '%@')", self.searchBar.text]];
        [self.fetchedResultsController.fetchRequest setPredicate:_predicate];
    }
    
    NSError *error;
    if (![self.fetchedResultsController performFetch:&error]) {
        // handle error...
    }
    NSLog(@"filtered results: %@", [self.fetchedResultsController fetchedObjects]);
    

    将动态过滤结果集[self.fetchedResultsController fetchedObjects]

答案 1 :(得分:0)

有多慢?看起来您的搜索和更新功能可能会有更简单的优化(除了线程),特别是考虑到您只是搜索联系人。除非你有成千上万的联系人,否则我无法想象这会特别慢。