【问题标题】:Help creating a predicate for use with filteredArrayUsingPredicate帮助创建一个谓词以与 filtersArrayUsingPredicate 一起使用
【发布时间】:2010-06-13 04:48:17
【问题描述】:

我正在尝试学习如何使用谓词,因此我尝试将以下工作代码替换为 filtersArrayUsingPredicate...

[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]];

我使用谓词得到的结果与使用 for 循环 rangeOfString 不同。以字符串范围为例,searchText 返回一个 8 项数组,而具有相同值的谓词仅返回 2 个。另一个例子,hono 会在位置数组中找到 honolulu,而它不会使用谓词找到任何东西。

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

任何帮助将不胜感激

谢谢,约翰

【问题讨论】:

    标签: iphone objective-c xcode predicate


    【解决方案1】:

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

    你可以试试这个

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

    更多细节可以看这里 NSPredicate Tutorial

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多