2017-09-13 13 views
2

の配列を持つ任意のCloudKitにおける述語は私がCloudKitNSPredicateNSCompoundPredicate(orPredicateWithSubpredicates:)を使用しようとしましたが、その後、私はので、私はこれで道路のブロックをヒットOR比較述部はCloudKitでサポートされていないことをAppleのドキュメントに読み込みます。使用して、CONTAINSまたは比較

私はRecord-typeReference 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 
    } 
} 
+0

' "%の@、IN tableNameの"、refs':

ここに私の一時的な解決策ですか? – Larme

+0

@Larme参照はREFERENCE_LIST型であるため、フィルタ型INを使用して照会することはできません。 –

+0

明確にするために、 'tableName'はCKReferenceのリストを表し、CKReferenceの別のリストを使用して述語を作成して、2つの配列の空でない交差があるかどうかを確認したいとします。あれは正しいですか? – rmaddy

答えて

1
NSMutableArray * tagsReferencesArray = [[NSMutableArray alloc] init]; 

    [tagsReferencesArray addObject:tag100_Reference]; 
    [tagsReferencesArray addObject:tag300_Reference]; 
    [tagsReferencesArray addObject:tag200_Reference]; 

predicate= [NSPredicate predicateWithFormat:@"ANY %@ in field_TagsReferenceList ", tagsReferencesArray]; 
関連する問題