1

嗨,我使用以下代码成功地在 arrayTags 中执行了搜索,其中 arrayTags 是每个 XML 元素的字段的数组,名为“tag”。问题是,比方说,标签有三个词:红色、白色、蓝色。如果我执行搜索“红色”或“白色、蓝色”或标签元素中包含的任何内容,一切正常。但是,如果我搜索“红白”,搜索不会返回任何内容。实际上,只有当我准确搜索 arrayTags 中包含的内容而不是不连续的单词时,搜索才会返回结果。你知道我该如何解决这个问题吗?非常感谢!

 - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{


     [resultArray removeAllObjects];

     NSString *cellTitle;
     for (cellTitle in arrayTags){

      NSString *stringa = cellTitle;
      NSRange range = [stringa rangeOfString:searchText];

      NSComparisonResult result = [cellTitle compare:searchText options:NSCaseInsensitiveSearch range:range];
      if (result == NSOrderedSame){

       int posizione = [arrayNames indexOfObjectIdenticalTo:cellTitle];

       [result Array addObject:[arrayNames objectAtIndex:posizione]];


      }
     }

     [self.tableView reloadData];
    }
4

1 回答 1

0

你的问题有两三个方面:

(1) 您必须定义,什么是单词分隔符,什么属于您要查找的单词。例如,“A,B”可以表示“寻找'A'和'B'”,也可以表示“寻找'A'和'_B'”(取消划线表示空白)可能,你想除像这样的搜索文本:

NSArray *listItems = [searchText componentsSeparatedByCharactersInSet:
                      [characterSetWithCharactersInString:@", "]];

也许,您想在之后消除 listItems 对象中的空格和 listItems 中的空对象。

(2) 只有在之后,您才能决定如何查找从阶段 (1) 获得的内容,例如通过创建一个谓词来查找 listItems 中的所有对象:

NSPredicate *inPredicate = [NSPredicate predicateWithFormat: @"SELF IN %@",
                           listItems];
NSArray* filteredArray = [arrayTags filteredArrayUsingPredicate:inPredicate];

请注意,此谓词区分大小写,因此请根据其他要求创建自己的谓词!

(3)filteredArray 可能应该是你的视图类的成员并且是新的tableDataSource。但是,有一些细微的问题需要解决:空搜索文本、将数据源从过滤内容切换到未过滤内容等。

于 2010-05-04T12:29:24.187 回答