gpt4 book ai didi

iphone - 核心数据搜索像 iPhone 通讯录应用程序一样?

转载 作者:行者123 更新时间:2023-12-03 21:17:48 26 4
gpt4 key购买 nike

我有一个联系人:NSManagedObject。我想按姓名(全名)搜索所有联系人。搜索的执行方式应与 iPhone 的通讯录应用程序类似。因此,如果 searchString 中的每个单词都以 name 中的任何单词开头,则 namesearchString 匹配。搜索不区分大小写和变音符号。

例如,name“Matt Di Pasquale”匹配 searchString“Matt Pa”、“Matt Mat”和“Pasq Di má”,但不匹配“att”或“方形”。

最佳答案

更新:观看WWDC 2010 Session Video: Optimizing Core Data Performance on iPhone OS以更快的方式执行此操作。

基于another answer about NSPredicate ,使用 ICU regular expression 从子谓词创建一个 NSCompoundPredicate :

NSArray *searchWords = [searchString words]; // see link below (1)
NSMutableArray *subpredicates = [NSMutableArray arrayWithCapacity:[searchWords count]];
for (NSString *searchWord in searchWords) {
[subpredicates addObject:[NSPredicate predicateWithFormat:
@"name CONTAINS[cd] %@ AND" // maybe speeds it up
" name MATCHES[cd] %@",
searchWord, [NSString stringWithFormat:
@".*\\b%@.*", searchWord]]];
}
fetchRequest.predicate = [NSCompoundPredicate andPredicateWithSubpredicates:subpredicates];

我认为 MATCHES 过滤发生在对象被提取到内存中之后,因此 name CONTAINS[cd] %@ 应该限制提取的对象的数量,也许可以加快速度向上。

(1) Cocoa Plant implements -[NSString words]

关于iphone - 核心数据搜索像 iPhone 通讯录应用程序一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8966620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com