【问题标题】:Performing a search on an NSArray from a UISearchBar从 UISearchBar 对 NSArray 执行搜索
【发布时间】:2012-11-06 15:41:10
【问题描述】:

我正在尝试对来自 JSON 提要的某些结果执行搜索,这些结果已加载到名为 tableData 的 NSArray 中,然后显示在 UITable 中。

searchResults NSArray 已被声明为 .h 文件。问题是目前 searchResults 是空的,并且没有向控制台输出任何内容。我不知道为什么......

我想知道是否缺少一些东西

searchResults = [tableData filteredArrayUsingPredicate:resultPredicate];

下面的代码行

感谢您的帮助。

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    NSPredicate *resultPredicate = [NSPredicate
                                    predicateWithFormat:@"SELF contains[cd] %@",
                                    searchText];

    searchResults = [tableData filteredArrayUsingPredicate:resultPredicate];

    NSLog(@"searchResults: %@", searchResults);

    NSLog(@"tableData results: %@", tableData);

}

【问题讨论】:

  • 你的 tableData 只是一个 NSString 的 NSArray?
  • 不,对于返回的每条记录,数据都是一个 NSDictionary:表结果是 { cat = "Pacchetti Vacanze";城市=“*”;坐标 = { 纬度 = "45.69769"; lng = "9.21534"; };

标签: objective-c ios nsarray nspredicate


【解决方案1】:

如果您在字典中查找名为“cat”的字段,而不是让谓词在 SELF 中查找,它应该在 SELF.cat 中查找。

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

如果您仍需要检查对象中包含的其他字段,您可以创建复合谓词。关于 Predicates 的详细信息可以在Apple's Predicate Programming Guide.找到。

【讨论】:

    【解决方案2】:

    尝试替换 [cd] -> [c]:

    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"self.youProperty contains[c] %@", searchString];
    

    like[cd] 的意思是“不区分大小写和变音符号的like”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-27
      • 2011-08-16
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多