2011-01-20 6 views
4

コアデータには、プロパティ 'text'を持つキーワードと呼ばれるエンティティがあります。私は特定の刺し傷に含まれているすべてのキーワードオブジェクトを探したい。文字列内にあるキーワードを取得するためのNSPredicate

私が試した:

[NSPredicate predicateWithFormat:@"%@ contains[c] text", myString]; 

をしかし、それはクラッシュします。それが逆転した場合にのみ機能するかのようです。

+0

あなたが望むものを少し良く説明できますか? 'k.textにはmyString'が含まれているすべてのキーワードエンティティ' k'、または 'k.myStringにはテキストが含まれているすべてのエンティティを探していますか?myStringはKeywordの変数属性名ですか? – Tim

+0

反対に、私は、mystringのk.text(含まれている)のすべてのキーワードエンティティを探しています。また、キーワードは単一の単語より長くなる可能性があるので、キーフレーズに似ています。 –

答えて

3

述語はエンティティで機能するため、述語を逆にします。エンティティのテキストプロパティには1つの単語が含まれているため、複数の単語に分割してテストします。

// This is very simple and only meant to illustrate the property, you should 
// use a proper regex to divide your string and you should probably then fold 
// and denormalize the components, etc. 
NSSet* wordsInString = [NSSet setWithArray:[myString componentsSeparatedByString:@" "]]; 
NSPredicate* pred = [NSPredicate predicateWithFormat:@"SELF.text IN %@", wordsInString]; 
+2

ターゲットフレーズから1つ以上の単語を検索したい場合はどうすればよいですか?例えば、私のkeyword.textは "ルートビール"で、 "Goose Island Root Beer"と比較して一致させたいと思います。式の両辺を分割して、キーワードの両方の部分がwordsInStringに設定されているかどうかを確認できますか? –

0

逆の方向に行っていると思います。

これを試してください。

[NSPredicate predicateWithFormat:@"text contains[cd] %@", myString]; 
関連する問題