2010-06-13 53 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