2012-01-13 14 views
1

この問題の解決策を見つけるために、私は広範囲にわたって検索しました。すべての試行で0の結果が得られます。ここでは、一般的なデータ構造である:NSPredicateを使用してコアデータエンティティのNSArray属性を検索する

キーワード=
Core Data Entity A { 
    stringAttribute string 
    .... 
    transformableAttribute(NSArray of NSString objects) keywords 
} 

[NSArrayのarrayWithObjectsを "文字列1"、 "文字列2" @ "文字列3" @、ゼロ@]私がしようとしています述語を実行してNSArrayのtransformable属性を検索します。

私はエンティティAに対して以下を試しました。コアデータストアはsqliteストアです。

NSString *term = @"string 1"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY keywords like[cd] %@", term]; 

0マッチ0マッチエラーで

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(keywords, $x, $x like %@)[email protected] > 0", term] 

---->結果に

NSArray *termArray = [NSArray arrayWithObject:@"string 1"]; 
NSPredicate *predicate = [NSPredicate [email protected]"ANY keywords in %@", termArray]; 

---->結果に---->結果は非関係はサブクエリコレクションではありません

私は上記のいくつかの順列を試みましたが、結果はまだありません。何かアドバイス?これはコアデータで可能ですか?

ありがとうございます!

+0

私は、文字列の配列を別のエンティティにして、それらを接続するために関係を使用すると、より簡単になると思います。あなたがしようとしていることは、そのように実装すれば簡単です。 – agilityvision

+0

ええ、私は別のエンティティがSQLのように最高だと思います。私は移行を避けることを望んでいましたが、私はより良い方法を見つけることができません。私は、述語によるフェッチが必要なfetchedresutlscontrollerを使用しています。私は手動でフィルタリングできません。 –

答えて

0

コアデータの要素であるtransformableAttributeと一緒に使用していませんが、これを述語化できないことを思い出してください。 (私が間違っている場合ので、いくつかのいずれかがこの上で私を呼んでください)

しかし、私はあなたのtransformableAttributearray of stringであることがわかりとき、私はちょうどwhy do you want an array in a database?

はなぜな関係をしないと言いたいですか?配列が異なる数の文字列を持つことができる場合、1対多の関係。

コアデータは、データベースを抽象化したもので、DBを使用していない場合は、テーブルを使用します。それはたぶんあなたの人生を単純化し、フェッチを可能にするでしょう。

+0

これは本当であるようです。私がtransformableAttributeでNSPredicateを直接検索すると、多くの人々はあなたがそれを行うことができないことを発見しました。変換可能な属性はバイナリデータとしてDBに格納されるため、SQLクエリを実行しても機能しません。 –

関連する問題