当前位置: 首页 > 知识库问答 >
问题:

NSPredicate搜索集合

艾宏远
2023-03-14

我有一个带有搜索栏的表视图。当我将项目添加到另一个数组时,我能够使用NSPredicate搜索表视图:

for(head in items){
   [desc addObject:head.DESC];
   [category addObject:head.CATEGORY];
 }

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
   NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"self CONTAINS[cd] %@", searchText];
searchResults = [desc filteredArrayUsingPredicate:resultPredicate];
}

现在,我想将集合放在一起,以便tableView DidSelectRowatingIndexPath能够使用category对象。

我像这样加载我的表视图:

for (int i = 0; i < [items count]; i++){
    head = [items objectAtIndex:indexPath.row];
    labelName.text = head.DESC;

如何让我的NSPredicate在收藏中搜索head。描述?

 #pragma mark Search Results
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
  {
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"self CONTAINS[cd] %@", searchText];
searchResults = [items filteredArrayUsingPredicate:resultPredicate];
}

目前,我在运行上述代码时遇到此异常。

reason: 'Can't use in/contains operator with collection <Order: 0x7b22e900> (not a collection)'

共有2个答案

明星剑
2023-03-14

我认为它可以帮助你:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
  NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"ANY self.DESC CONTAINS[cd] %@", searchText];
  searchResults = [items filteredArrayUsingPredicate:resultPredicate];
}
柯波
2023-03-14

我想我理解你的问题。您希望能够通过DESC属性过滤您的数组(这是一堆头)。用积木怎么样?

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
  NSPredicate *resultPredicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
      return [[evaluatedObject DESC] containsString:searchText];
    }];

  searchResults = [items filteredArrayUsingPredicate:resultPredicate];
}

如果您的订单对象将描述定义为属性(或者与KVC兼容),那么您可以直接访问它。这应该有效:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
  NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"self.DESC CONTAINS[cd] %@", searchText];
  searchResults = [items filteredArrayUsingPredicate:resultPredicate];
}
 类似资料:
  • 我在我的项目中使用SKMaps,它用于下载离线地图,我必须使用NSPredicatefor搜索一些SKTPackage集合。 为了显示国家的名称,我读取了这样的“en”值 现在我想从列表中搜索国家的名称。现在我使用以下代码行 但它给了我一个崩溃的消息如下 “NSInvalidArgumentException”,原因:“无法在/包含带有集合(不是集合)的运算符中使用”。 请告诉我使用NSPredi

  • 用NSPredicate类写的一个简单的模糊搜素方法,比for循环快并且性能消耗很低。 [Code4App.com]

  • 我在我的应用程序中使用Hibernate搜索。其中一个子集合映射为IndexeDemBedded。子对象有两个字段,一个是id,另一个是date(使用date resoultion到毫秒)。当我搜索ID=1(或某个值)并且date等于另一个值时,我会得到第一个和第二个匹配的所有情况的结果。我只想在同一个孩子中获得两个字段匹配的记录,但我在不同的孩子中获得匹配,结果会高得多。下面是代码片段 主类是用

  • 我试着遵循这里列出的Nutch+ES指南 https://gist.github.com/xrstf/b48a970098a8e76943b9 https://qbox.io/blog/scring-the-web-wit-nutch-for-elasticsearch 然而,我无法让他们的组合工作。基本上,我在Nutch上执行了以下命令: 现在,我想将获取的数据索引到ES中,我按照指南进行了操作

  • 我有:一个实体有一个的集合,每个阶段都有一个的集合。Stage项可以有几种类型,我在JPA/Hibernate中使用它们作为带有鉴别器列的继承策略。 我需要lucene查询返回在类型a的阶段项(类中的字段)中具有特定细节的请求。我无法让hibernate搜索查看子类中的字段。 因此这个lucene查询不起作用(返回0个结果): 但基于中的字段进行搜索有效:

  • 本文向大家介绍Javascript搜索集合中的对象键,包括了Javascript搜索集合中的对象键的使用技巧和注意事项,需要的朋友参考一下 JavaScript中的Set类提供了一个has方法来搜索给定set对象中的元素。如果要在集合中搜索对象,则需要提供对该对象的引用。具有不同内存地址的相同对象不视为相等。此方法可以如下使用- 示例 输出结果