[英]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.