3

嗨,我有一个填充 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 Professional 3D LCD Monitor的项目。我可以搜索TD ProfessionalTD ProTD并使用任何情况返回上述正确的项目。但是,如果我搜索Pro TD,它不会显示任何结果。我面临的问题是用户可能不知道产品标题或描述的顺序?所以我需要实现一些可以在逻辑上做到这一点的东西。我真的不知道该怎么做。

以供参考

NSMutableArray *parserData; // 完成主完整数组 NSMutableArray *filteredListContent; // 搜索结果数组

任何建议将不胜感激。

4

1 回答 1

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];
    }
}
于 2012-04-23T22:02:36.400 回答