1

私は UISearchDisplay Controller をセットアップしており、値をフィルタリングするように機能していますが、結果をフィルタリングするもう少し高度な方法で誰かが私を助けることができるかどうか疑問に思っていました.

私の配列が次のようなものだったとしましょう: { アメリカの例, Eric, Different-Eric }

ユーザーが "Eri" を検索した場合、結果は { Eric, Different-Eric } になるはずです。これは、単語が単語の中央にある場合 (American) ではなく、単語が部分文字列で始まる場合にのみ結果を返す必要があるためです。

また、'-' が ' ' であるかどうか、およびその逆もチェックする必要があります。したがって、部分文字列 'Different-Eri' は、部分文字列 'Different Eri' も検索し、その逆も検索します。

さらに説明が必要な場合は、喜んでお答えします。何か良い方法はないかと考えてみました。

現在のコード:

NSPredicate *resultPredicate = [NSPredicate 
                                    predicateWithFormat:@"SELF.comname contains[cd] %@",
                                    searchText];

    searchResults = [[birdsArray filteredArrayUsingPredicate:resultPredicate] mutableCopy];
4

1 に答える 1

0

カスタムオブジェクトと検索述語にいくつかの変更を加えることで、実際にこれを解決しました。私が以前考えていたよりもはるかに簡単な解決策です。

カスタム オブジェクトで 2 つのプロパティを作成し、Getters メソッドにそれぞれ「名」と「姓」を返すようにしました。これは基本的に、「 」または「-」を単語として使用して、完全な文字列を最初の単語と最後の単語に分割しました。区切り記号。

私の検索述語は次のようになりました。

NSPredicate *spacePredicate = [NSPredicate 
                                   predicateWithFormat:@"SELF.comname BEGINSWITH[cd] %@ OR SELF.lastname BEGINSWITH[cd] %@",
                                   searchText, searchText];

    searchResults = [[birdsArray filteredArrayUsingPredicate:spacePredicate] mutableCopy];

単語の先頭が部分文字列と一致するように、contains の代わりに 'BEGINSWITH' を使用しました。

最後:)、誰かの役に立てば幸いです。

于 2012-08-01T18:04:43.903 に答える