8

ユーザー名キーを使用してコア データ ストアからオブジェクトを取得したい状況がありますが、比較では大文字と小文字を区別しないようにしたいと考えています。私が持っている述語はこれです:

username IN $usernames

次に、検索したいユーザー名である文字列の配列で変数置換を行います。動作しますが、大文字と小文字が区別されます。私はこのようなことをしたいと思います:

username IN[c] $usernames

残念ながら、それはうまくいかないようです。文字列の比較は、大文字と小文字を区別して行われている必要があります。(サポートされていないクエリであるというエラーは表示されません。)

この述語を書く別の方法はありますか?

4

4 に答える 4

11

IN 演算子のケース修飾子は、SQLite ストアに対してフェッチを実行するときに明らかに無視されます。(質問から店舗タイプを省略しました。)

この制限/動作を文書化できるように、文書に対してバグを報告することをお勧めします。

また、将来のサポートのために検討できるように、バグ レポーターに機能リクエストを提出することをお勧めします。

それまでの間、フェッチ リクエストをデータ モデルから取り出して、プログラムで構築する必要があります。各値に対して大文字と小文字を区別しない等価一致を実行する複合述語 OR 述語を作成できます (そして、それがパフォーマンスのニーズを満たしていることをテストします)。

10.6 より前の OS ターゲットをサポートしている場合、== の case 修飾子はサポートされていないことに注意してください。その場合、さらに別の代替ソリューションが必要になります。

于 2010-01-07T02:19:20.923 に答える
1

別の回避策がありますが、MOMを変更する必要があります。

ユーザー名を本格的なエンティティにします。ユーザー名と他のエンティティとの間に逆の関係を作成します。

次に、フェッチリクエストの場合、エンティティを「ユーザー名」として設定し、次の述語を実行します(「名前」プロパティと「親」プロパティを想定)。

   [NSPredicate predicateWithFormat:"(name like[c] %@) && (parent == %@)", theUserName, theParentObject]

これはやり過ぎかもしれませんが、必要に応じて検索を実行できます。

于 2010-01-07T17:59:43.157 に答える
1

のようなものを試すことができANY $usernames LIKE[c] usernameます。変数置換の代わりに、「persons.name」のようなキーパスがあり、その述語が機能します。キーパスの代わりに変数を使用して動作が異なるかどうかはわかりませんが、試してみる価値はあります。

于 2010-01-07T03:39:49.937 に答える