1

正確なSQLクエリを実行したい:

select * from table where field1 = 'x' or field2 = 'x' or field3 = 'x'

これまでのところ、エンティティで 1 つのフィールドしか取得できません。

NSArray *products = [Product MR_findByAttribute:@"id" withValue:categoryID];

idたとえば、categoryID のフィールドを取得したいとnameします。MagicalRecord でそれを行うにはどうすればよいですか?

私はそれを行うことができます:

NSArray *productsByID = [Product MR_findByAttribute:@"id" withValue:categoryID];
NSArray *productsByName = [Product MR_findByAttribute:@"name" withValue:categoryID];

代わりに1行のソリューションはありませんか? 多くのフィールドを扱う場合、それは少し複雑になるからです。

4

1 に答える 1

3

NSPredicate を使用します。例えば

[Contact MR_findAllWithPredicate:[NSPredicate predicateWithFormat:@"%K contains[cd] %@ or %K contains[cd] %@", @"name", @"jo", @"surname", @"jo"];

Contact がエンティティの場合、%K はキー (エンティティの属性) のプレースホルダー、%@ は検索値のプレースホルダーです。

この述語は、名前または姓に jo が含まれる連絡先を検索するために使用されます。

あなたのためのソリューション

select * from table where field1 = 'x' or field2 = 'x' or field3 = 'x'

[Product MR_findAllWithPredicate:[NSPredicate predicateWithFormat: @"%K == %@ OR %K == %@ OR %K == %@", @"field1", @"x", @"field2", @"x", @"field3", @"x"];
于 2013-07-23T14:41:07.010 に答える