2

我创建了一个带有 tableview + searchbar 的视图。如果搜索字符串中的第一个单词,它会完美运行!不幸的是,如果在字符串中搜索不同的单词,它就不起作用。因此,如果我要搜索文本:bal.

我会查看以下字符串:green bal。它什么也找不到。

我目前正在使用以下代码将搜索栏文本与数据进行比较:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{

[self.filteredListContent removeAllObjects]; // First clear the filtered array.

for (Product *product in self.listContent)
{

    NSComparisonResult result = [product.name compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
    if (result == NSOrderedSame)
    {
        [self.filteredListContent product];
    }
}
NSMutableSet *tempSet = [NSMutableSet setWithArray:self.filteredListContent];
self.filteredListContent = [NSMutableArray arrayWithArray:[tempSet allObjects]];
}

我该如何解决这个问题?

任何帮助或建议将不胜感激!

4

1 回答 1

2

compare:options:range:此代码使用以下方法查找完全匹配(不区分大小写和变音符号)NSString

NSComparisonResult result = [product.name compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
if (result == NSOrderedSame)
{
    [self.filteredListContent product];
}

鉴于您的问题描述,您希望确定一个字符串包含在另一个字符串中。改用以下rangeOfString:options:方法NSString

NSRange range = [product.name rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)];
if (range.length > 0)
{
    [self.filteredListContent product];
}
于 2012-05-25T19:06:58.223 回答