2012-04-14 6 views
0

コンテキスト内にエンティティAを挿入する際に問題があります。NSFetchRequestはコンテキスト内に存在するエンティティをフェッチします

NSEntityDescription* entity = [NSEntityDescription entityForName:@"A" inManagedObjectContext:ctx]; 
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity:entity]; 
NSError* fetchError; 
NSArray* results = [ctx executeFetchRequest:fetchRequest error:&fetchError]; 

上記のこのコードは、それらのすべてを取得することができ、私は...のNSLogでそれらを見ることができます

右:私は、エンティティのすべてを挿入した直後AIは、コンテキストにフェッチ要求を実行します後の同じコンテキストに私はこのように、年齢= 5を持っているすべてのエンティティを取得しよう: は

NSEntityDescription* entity = [NSEntityDescription entityForName:@"A" inManagedObjectContext:ctx]; 
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity:entity]; 
NSPredicate *filter = [NSPredicate predicateWithFormat:@"%K == %@",attr,value]; 
[fetchRequest setPredicate:filter]; 
NSError* fetchError; 
NSArray* results = [ctx executeFetchRequest:fetchRequest error:&fetchError]; 

THE(私はattirbuteに「年齢」と「5」の値に@ NSStringのを割り当てます)問題はNSLogが年齢5のエンティティAを示していても、この最後のフェッチリクエストrいつもeturnsはヌルです!何もない。

提案がありますか?なぜそれらのすべてをフェッチすると5歳のエンティティが表示され、5歳のフィルタリングは同じコンテキストではすぐに機能しませんか?

おかげ

+0

モデルの年齢はどのようなタイプですか? –

+0

NSNumber(整数64)、また、私は、述語を@ "age == 5"にハードコードすると、それが機能することを知りました。今、混乱しています。 – zumzum

+0

%@文字列引数を使用すると、文字列比較の引用符が挿入されます。データが文字列でない場合は、比較しません...これが私が型を尋ねた理由です... –

答えて

3

はするNSNumberのインスタンスに年齢を設定してみてくださいではなく "5" @ NSStringのに比べ5にinitalized。

+0

Worked。私はいつもNSPredicateで文字列を提供できると思っていました...年齢はNSNumberなので、あなたの提案はうまくいきますが、おそらくなぜ私はちょうど私がこの場合、NSStringを渡しますか?私はここで何が欠けていますか?ありがとう!! – zumzum

+0

文字列を述語に引数として渡すと、値が5とは比較されない引用符付きの「文字列」に自動的に変換されます。 –

+0

意味があります。ありがとうございました。 – zumzum

関連する問題