IOS SDK 6.0とXCode 4.5.2でiOSアプリケーションを開発しています。私のターゲット開発は4.3です。
Core Dataを使用してデータを管理しています。これで、NSPredicate
でショップを検索できます。
if ((shopSearchBar.text != nil) && ([shopSearchBar.text length] > 0))
{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@",shopSearchBar.text];
[fetchRequest setPredicate:predicate];
}
これはショップエンティティです。
nameを小文字に変換し、小文字の形式でshopSearchBar.text
が含まれているかどうかを確認する必要があります。
例:
私はこれらの4つの店を持っています:
ユーザー検索テキストが「ショップ」の場合は、それらすべてを返す必要があります。
その方法を知っていますか?
これは私が私の問題を解決した方法です:
if ((shopSearchBar.text != nil) && ([shopSearchBar.text length] > 0))
{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@",
shopSearchBar.text];
[fetchRequest setPredicate:predicate];
}
NSPredicatのpredicateWithBlock:メソッドを使用できるはずです。
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id obj, NSDictionary *bind) {
return [self.name compare:shopSearchBar.text options:NSCaseInsensitiveSearch] == NSOrderedSame; }];
(a)リポジトリに列(lowercaseName)を追加し、ショップを保存するたびに、その名前の小文字のみのバージョンを保存することができます。次に、あなたの述語は単に比較です:)
(b)ただし、大文字と小文字を区別しない比較を行うだけの場合は、次のようにしてください。
if ((shopSearchBar.text != nil) && ([shopSearchBar.text length] > 0))
{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name LIKE[cd] %@",shopSearchBar.text];
[fetchRequest setPredicate:predicate];
}
これも発音区別符号を区別しない比較です。その他のオプションについては、 このドキュメントページ の文字列比較セクションを参照してください。
(a)クエリは高速になりますが、コードはより複雑になります。 (b)非常に単純なsaveメソッドを提供しますが、(少し)クエリが遅くなります