NSComparisonResult搜索字符串的一部分?

时间:2011-01-24 22:03:36

标签: iphone objective-c ios uisearchdisplaycontroller

我正在使用NSComparisonResult和我的SearchController:

for (Annotation *ano in listContent) {
        NSComparisonResult result = [ano.title compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
        if (result == NSOrderedSame) {
            [self.filteredListContent addObject:ano];
        }
    }

如果我搜索一个字符串,它只会找到以该字符串开头的结果。

记录是“我的画廊

  • 搜索“我的美术馆”< --- 结果

  • 搜索“我的”< ---找到

  • 搜索“艺术”< ---未找到

  • 搜索“图库”< ---未找到

如何更改我的代码,以便我可以找到上面显示的部分字符串?

2 个答案:

答案 0 :(得分:12)

我最终使用了NSRange,它允许我基本上搜索子字符串:

for (Annotation *ano in listContent) {

        NSRange range = [ano.title rangeOfString:searchText options:NSCaseInsensitiveSearch];
        if (range.location != NSNotFound) {
            [self.filteredListContent addObject:ano];
        }

    }

答案 1 :(得分:6)

有一种直接的方法可以进行子字符串检查:

NSComparisonResult result1 = [dummyString compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:[dummyString rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)]];
if (result1 == NSOrderedSame)
{
 [self.filteredListContent addObject:dummyString];  // this can vary drastically 
}

注意:我使用的是UISearchDisplayController,这对我来说非常合适。

希望将来能帮到你。

感谢this post(更新:此链接不再有效。)