2010-06-13 52 views
2

我想學習如何使用謂詞,因此我試圖取代filteredArrayUsingPredicate以下工作代碼...幫助創建使用謂詞filteredArrayUsingPredicate

[filteredLocations removeAllObjects]; 
for (NSString *location in locations) { 
    NSRange range = [location rangeOfString:query options:NSCaseInsensitiveSearch]; 
if (range.length > 0) { 
     [filteredLocations addObject:location]; 
    } 
    } 

相反,我想....

[filteredLocations removeAllObjects]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains %@", searchText]; 
[filteredLocations addObjectsFromArray: [locations filteredArrayUsingPredicate:predicate]]; 

我沒有得到與謂詞相同的結果,因爲我用循環rangeOfString。以字符串的範圍爲例,searchText返回一個8項數組,而具有相同的值的數組只返回2個謂詞。另一個例子,hono會在locations數組中找到檀香山,而使用謂詞找不到任何東西。

據我所知,SELF代表被評估的對象對象,即。 locations數組,所以我認爲這是正確的語法。

任何幫助,將不勝感激

謝謝,約翰

回答

3

我認爲在你的循環,你指定一個選項NSCaseInsensitiveSearch但在謂詞你沒有。

你可以用這一個

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SELF contains[cd] %@)", searchText]; 

更多細節可以試試在這裏被看作 NSPredicate Tutorial

+0

感謝該訣竅! – user278859 2010-06-13 05:43:37