3

Cloudkit を使用して複合述語でこれを実行しようとしていますが、Xcode エラーで「予期しない式」と表示されます。私のコードの何が問題なのか誰にも分かりますか? どんな助けにも感謝します!

let userRef = CKReference(recordID: userID, action: .None)

    let predicateOne = NSPredicate(format: "recordID IN %@ AND user = %@", postIDs, userRef)
// I need all user post's that match the IDs in the array and where the user ID matches the Id in the reference field for the user.

    let predicateTwo = NSPredicate(format: "recordID IN %@", followIDs)
// Or I want recordID's that match the IDs in this array.
// I want records if either predicate condition is met, or both, which is why I'm using an OrPredicateType.

    let predicate = NSCompoundPredicate(type: NSCompoundPredicateType.OrPredicateType, subpredicates: [predicateOne!, predicateTwo!])
    let query = CKQuery(recordType: "UserPosts", predicate: predicate)
    let queryOp = CKQueryOperation(query: query)
4

1 に答える 1

2

CloudKit に NSPredicate を使用するためのルールがいくつかあります。詳細については、Apple のドキュメントを参照してください。

あなたが試すことができるのは、次のような述語を作成することです:

NSPredicate(format: "recordID IN %@ OR (recordID IN %@ AND user = %@)", followIDs, postIDs, userRef)

しかし、AND ステートメントと OR ステートメントの両方を含む述語を使用した経験はありません。この述語が機能しない場合、唯一の解決策は 2 つの個別のクエリを実行してから結果を結合することだと思います。ExSwiftライブラリの union 関数を使用してそれを行うことができます

于 2015-03-31T19:42:14.760 に答える