簡體   English   中英

像iPhone聯系人應用程序這樣的核心數據搜索?

[英]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] %@應該限制​​所提取對象的數量,並可能加快處理速度。

(1) 可可工廠實現了-[NSString words]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM