[英]Core Data search like iPhone Contacts app?
我有一个Contact : NSManagedObject
。 我想按name
(全名)搜索所有联系人。 搜索的效果应与iPhone的“通讯录”应用类似。 因此, name
匹配searchString
,如果在每一个字searchString
以任何字开头name
。 该搜索不区分大小写和变音符号。
例如, name
“ Matt Di Pasquale”与searchString
“ Matt Pa”,“ Matt Mat”和“ Pasq Dimá”匹配,但与“ att”或“ squale”不匹配。
更新:观看WWDC 2010会话视频:在iPhone OS上优化核心数据性能,这是一种更快的方法。
根据关于NSPredicate的另一个答案 ,使用ICU正则表达式从子谓词创建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] %@
应该限制所提取对象的数量,并可能加快处理速度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.