您好我有一个填充tableview的主数组,我有一个筛选数组用于搜索结果。使用以下方法,这两种方法都可以正常工作。我的tableview和搜索显示数组运行良好,除了此代码块下的以下问题。
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
[self.filteredListContent removeAllObjects]; // First clear the filtered array.
for (product *new in parserData)
{
//Description scope
if ([scope isEqualToString:@"Description"])
{
NSRange result = [new.description rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)];
if (result.location != NSNotFound)
{
[self.filteredListContent addObject:new];
}
}
//Product scope
if ([scope isEqualToString:@"Product"])
{
NSRange result = [new.item rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)];
if (result.location != NSNotFound)
{
[self.filteredListContent addObject:new];
}
}
}
}
我想要实现的是这个。我在主阵列中有一个名为 LMD-2451 TD专业3D液晶显示器的项目。我可以搜索道明专业版,道明专业版,道主,并使用任何案例返回上述正确的项目。但是,如果我搜索 Pro TD ,则不会显示任何结果。我面临的问题是用户可能不知道产品标题或描述的顺序?所以我需要实现一些逻辑上可行的东西。我真的很想做什么。
供参考
NSMutableArray * parserData; //完成主完整数组 NSMutableArray * filteredListContent; //搜索结果的数组
任何建议都将不胜感激。
答案 0 :(得分:2)
如何在搜索字符串上使用componentsSeperatedByString:@" "
将其拆分为(在您的示例中)包含2个字符串@"Pro"
和@"TD"
的数组。然后使用rangeOfString:
检查数组中的所有组件是否在new.item
中找到。
//Product scope
if ([scope isEqualToString:@"Product"])
{
// Split into search text into separate "words"
NSArray * searchComponents = [searchText componentsSeparatedByString: @" "];
BOOL foundSearchText = YES;
// Check each word to see if it was found
for (NSString * searchComponent in searchComponents) {
NSRange result = [new.item rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)];
foundSearchText &= (result.location != NSNotFound);
}
// If all search words found, add to the array
if (foundSearchText)
{
[self.filteredListContent addObject: new];
}
}