現在、これを使用して辞書の配列を検索しています(plistファイルから):
for(NSDictionary *wine in mainArray)
{
NSString *wineName = [wine objectForKey:@"name"];
NSRange range = [wineName rangeOfString:searchText options:NSCaseInsensitiveSearch];
if(range.location != NSNotFound)
[searchArray addObject:wine];
}
この質問では、例としてこのplistを使用します。
<array>
<dict>
<key>name</key>
<string>Banana One (Yellow)</string>
<key>value</key>
<string>1</string>
</dict>
<dict>
<key>name</key>
<string>Apple Two (White)</string>
<key>value</key>
<string>2</string>
</dict>
<dict>
<key>name</key>
<string>Pineapple Three (Orange)</string>
<key>value</key>
<string>3</string>
</dict>
<dict>
</array>
(値は気にしないでください)
わかりました、NSCaseInsensitiveSearch で UISearchBar を使用しているときは、(ObjectForKey=@"name")
Case を考えずに配列を検索するだけです。良い!
たとえば、次を検索し@"banana"
て、:Banana One (Yellow) を見つけることができます。
そして私は検索することができます:@"two"
そして :Apple Two (White) を見つけることができます
「one」を検索@"banana
して、「Banana One (Yellow)」を見つけます。
@"Orange"
また、次を検索して、:Pineapple Three (Orange) を見つけることもできます。
ただし、検索が正しい順序で行われた場合のみ
検索できません:@"One Banana"
または@"Yellow One"
、@"Yellow Banana"
キーワードを使用して、このように検索できるようにしたいですか?
多分このようなもの?:
for(NSDictionary *wine in mainArray)
{
NSArray *myArray = [searchText componentsSeparatedByString:@" "];
NSString *wineName = [wine objectForKey:@"name"];
NSRange range = [wineName rangeOfString:myArray options:NSCaseInsensitiveSearch];
if(range.location != NSNotFound)
[searchArray addObject:wine];
}
これが本当にうまくいかないことはわかっていますが、私の言いたいことがわかると思いますか? では、たとえば次のように検索できるようにする方法:@"one banana"
そして :Banana One (Yellow) を見つける方法