3

こんにちは私はテーブルビューにデータを入力するマスター配列を持っており、検索結果用にフィルター処理された配列を持っています。これらは両方とも、以下の方法を使用して正常に機能します。私のテーブルビューと検索表示配列は、このコードブロックの下の以下の問題を除いてうまく機能しています。

- (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-2451TDProfessional 3DLCDMonitorというアイテムがあります。TD ProfessionalTD ProTDを検索すると、どのような場合でも上記の正しいアイテムが返されます。ただし、 Pro TDを検索しても、結果が表示されません。私が直面している問題は、ユーザーが製品のタイトルや説明の順序を知らない可能性があることです。したがって、これを論理的に行う何かを実装する必要があります。私は本当に何をすべきかで立ち往生しています。

参考のために

NSMutableArray * parserData; //メインの完全な配列を完成させますNSMutableArray*filteredListContent; //検索結果の配列

任意の提案をいただければ幸いです。

4

1 に答える 1

2

検索文字列を使用して、(この例では)2つの文字列の配列にcomponentsSeperatedByString:@" "分割してみてはどうでしょうか。次に、配列内のすべてのコンポーネントがにあることを確認して、配列をループします。@"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 に答える