の配列を持つ任意のCloudKitにおける述語は私がCloudKit
NSPredicate
でNSCompoundPredicate(orPredicateWithSubpredicates:)
を使用しようとしましたが、その後、私はので、私はこれで道路のブロックをヒットOR
比較述部はCloudKit
でサポートされていないことをAppleのドキュメントに読み込みます。使用して、CONTAINSまたは比較
私はRecord-type
のReference list
にこれらの参照が含まれているかどうかを確認する必要があるCKReferences
の配列を持っています。
私はcompletionBlock
のネストされたクエリを避けようとしているので、述語自体をアセンブルする方法には苦労しています。
はのは、私は参照の次の配列を持っているとしましょう:
let refs = [CKReference]() // in my case the array isn't empty
私は次のことを試してみましたが、それは何とかそれだけで、配列の最初のオブジェクトを探しますので、働いていた、と全体ではなく、アレイませんでした。ここで
let predicate = NSPredicate(format: "tableName CONTAINS %@", argumentArray: refs)
私はpredicate
を印刷する場合には、印刷します。
tableNameのはCKReference含まれています:0x600000229c40を。 20B54862-46CC-405F-BAE8-0DC8D3A52F78:(_ defaultZone:defaultOwner)>
あなたが見ることができるように、それだけで、配列の最初のオブジェクトを探します。
それは私が述語でANY
演算子を使用している場合、仕事のようなものがあります。
let predicate = NSPredicate(format: "ANY { '%@', '%@' } = tableName", args: refs[0], refs[1])
しかしrefs
配列は動的であり、私にはないので、ここでの私の問題は、どのように私はその述語を構築することができますです何個のオブジェクトが含まれているか知っていて、それによってrefs
配列の[0], [1], ...
にアクセスするpredicate args
を構築する方法はわかりません。
回避策はありますか?またはこの問題にアプローチする最善の方法は?
ありがとうございます。
EDIT
私はこの問題を解決する方法を考え出すが、それが最も効率的な一つだ場合、私は知らないので、私はまだ答えや意見に開放しています。
for (i, reference) in refs.enumerated() {
let predicate = NSPredicate(format: "tableName CONTAINS %@", reference)
// CKQuery
// CKQueryOperation
// Database.add(CKQueryOperation)
if i == refs.count - 1 {
// UPDATE UI
}
}
' "%の@、IN tableNameの"、refs':
ここに私の一時的な解決策ですか? – Larme
@Larme参照はREFERENCE_LIST型であるため、フィルタ型INを使用して照会することはできません。 –
明確にするために、 'tableName'はCKReferenceのリストを表し、CKReferenceの別のリストを使用して述語を作成して、2つの配列の空でない交差があるかどうかを確認したいとします。あれは正しいですか? – rmaddy