搜索显示控制器iOS结果消失然后重新出现在单词之间

时间:2012-05-31 17:39:34

标签: ios nsstring uisearchbar uisearchdisplaycontroller

我正在搜索我的产品,如下所示。它工作正常但是当在2个单词之间搜索时,结果消失,然后在用户输入下一个单词的第一个字符后重新出现。即如果我搜索“td pro”或“pro td”,结果就在那里。如果我像这样搜索td(我有结果)td(空格)我没有结果td p(我有结果)只是为了添加我需要在componentsSeperatedByString中用空格分隔单词,因为用户可能不会搜索产品以任何特定的顺序。除非有更好的方法吗?

这是我的代码:

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

{

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



for (XMLStringFile *new in rssOutputData_MutableArray)
{

    //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.xmlItem rangeOfString:searchComponent options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)];
            NSRange descriptionRange = [new.xmlDescription rangeOfString:searchComponent options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)];

            foundSearchText &= (result.location != NSNotFound|| descriptionRange.location != NSNotFound);
        }

        // If all search words found, add to the array
        if (foundSearchText)
        {
            [self.filteredListContent addObject: new];
        }
    }

}

}

非常感谢

1 个答案:

答案 0 :(得分:0)

我在另一个有人帮助我的堆栈问题的帮助下修复了它。

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

{

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



for (XMLStringFile *new in rssOutputData_MutableArray)
{

    //Product scope
    if ([scope isEqualToString:@"Product"])
    {
        // Split into search text into separate "words"
        NSArray * searchComponents = [searchText componentsSeparatedByString: @" "];

        //Before searching trim off the whitespace
        searchText = [searchText stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];


        BOOL foundSearchText = YES;

        // Check each word to see if it was found
        for (NSString * searchComponent in searchComponents) {
            NSRange result = [new.xmlItem rangeOfString:searchComponent options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)];
            NSRange descriptionRange = [new.xmlDescription rangeOfString:searchComponent options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)];

            foundSearchText &= (result.location != NSNotFound|| descriptionRange.location != NSNotFound);
        }

        // If all search words found, add to the array
        if (foundSearchText)
        {
            [self.filteredListContent addObject: new];
        }
    }

}

}

获胜线是:

//在搜索修剪空白之前         searchText = [searchText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];