2012-08-01 65 views
1

我有一個UISearchDisplay控制器設置,它正在過濾值,但我想知道是否有人可以幫我用一點點高級的方式來過濾結果。以特定的方式搜索NSArray的子​​字符串

說我的數組是: {美國的榜樣,埃裏克,不同-埃裏克}

如果用戶搜索「惠理」,結果應該是 {埃裏克不同,埃裏克} 因爲是應該只返回結果是一個單詞以子串開始,而不是如果它在單詞的中心(美國)。

它還應該檢查' - '是否可以是''和visaversa。所以子字符串'Different-Eri'也會搜索子字符串'Different Eri',反之亦然。

如果您需要更多的解釋,我會很樂意回答。我只是想知道是否有一個好辦法去做這件事。

當前代碼:

NSPredicate *resultPredicate = [NSPredicate 
            predicateWithFormat:@"SELF.comname contains[cd] %@", 
            searchText]; 

    searchResults = [[birdsArray filteredArrayUsingPredicate:resultPredicate] mutableCopy]; 

回答

0

我確實使一些改變,我的自定義對象和搜索謂詞解決了這個。比我以前想的要簡單得多。

在我的自定義對象中,我做了2個屬性,並且讓Getters方法分別返回'名字'和'姓氏',它們基本上將整個字符串分解爲第一個單詞和最後一個單詞,使用''或' - '作爲詞語排除者。

我的搜索謂詞簡直就成了:

NSPredicate *spacePredicate = [NSPredicate 
            predicateWithFormat:@"SELF.comname BEGINSWITH[cd] %@ OR SELF.lastname BEGINSWITH[cd] %@", 
            searchText, searchText]; 

    searchResults = [[birdsArray filteredArrayUsingPredicate:spacePredicate] mutableCopy]; 

我用「BEGINSWITH」而不是包含以確保單詞的開始相匹配的字符串。

結束:),希望它有助於某人。