web-dev-qa-db-ja.com

NSFetchRequestに複数の述語を適用できますか?結果を手動で解析する方がよいでしょうか?

わかりました。ユーザーに5つの検索/フィルター条件を要求する基本的なiPadアプリがあります。このデータに基づいて、コアデータデータベースに移動し、その基準に一致する管理対象オブジェクトをすべて引き出す必要があります。同じリクエストに複数の述語を適用する必要があるようですが、それは可能ですか?それとも、本当に長い派手な述語を書くことができますか?複数の要件がありますか?どのようにアプローチすればよいですか?

フェッチ要求を介してすべてのエンティティを取得してから、各配列をループして、検索条件に一致するオブジェクトを取得することをお勧めしますか?

お知らせ下さい!

32
Lizza

はい、それは可能です。複合述語を探しています。AND述語の例を次に示します。

NSPredicate *compoundPredicate 
   = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray of Predicates]];

必要に応じて、notPredicateWithSubpredicatesおよびorPredicateWithSubpredicatesを使用することもできます。

ドキュメントへのリンク https://developer.Apple.com/documentation/foundation/nscompoundpredicate

84
Rog

スウィフト4

let fetchRequest: NSFetchRequest<YourModelEntityName> = YourModelEntityName.fetchRequest()

let fooValue = "foo"
let barValue = "bar"

let firstAttributePredicate = NSPredicate(format: "firstAttribute = %@", fooValue as CVarArg)
let secondAttributePredicate = NSPredicate(format: "secondAttribute = %@", barValue as CVarArg)

fetchRequest.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [firstAttributePredicate, secondAttributePredicate])

さまざまなタイプのNSCompoundPredicateコンストラクターの詳細については、 ここ を参照してください。

3
Denis Zenin