帮助创建谓词以与filteredArrayUsingPredicate一起使用

时间:2010-06-13 04:48:17

标签: iphone objective-c xcode predicate

我正在尝试学习如何使用谓词,因此我尝试使用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]];

对于loop rangeOfString,我没有得到与谓词相同的结果。使用string的范围,例如searchText返回一个8项数组,而具有相同值的返回只有2与谓词。另一个例子,hono将在locations数组中找到honolulu,而使用谓词则找不到任何内容。

据我了解,SELF代表被评估的对象,即。位置数组,所以我认为这是正确的语法。

任何帮助将不胜感激

谢谢,约翰

1 个答案:

答案 0 :(得分:3)

我认为在你的for循环中,你指定了一个选项NSCaseInsensitiveSearch,但在谓词中你没有。

你可以试试这个

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

可以在此处查看更多详细信息 NSPredicate Tutorial