0

Downloadのラッパーとして機能するクラスがありますCKQueryOperation。init の 1 つを使用すると、値の配列を使用して述語を作成できます。

init(type: String, queryField: String, queryValues: [CKRecordValue], to rec: RecievesRecordable, from database: CKDatabase? = nil) {
    let predicate = NSPredicate(format: "\(queryField) = %@", argumentArray: queryValues)
    query = CKQuery(recordType: type, predicate: predicate)

    reciever = rec
    db = database

    super.init()
}

テストするとquery、配列の最初の値にのみ一致します。したがってqueryValues = [testValue0, testValue1]、 フィールドが一致する 1 つのレコードがあり、testValue0に一致する 2 番目のレコードがあるtestValue1場合、最初のレコードのみが検出されます。順序を入れ替えると、他のレコードが認識されます。

配列で述語を作成できるのに、最初の値だけが一致するのは奇妙に思えます。ドキュメントには、値は出現順に代入されると書かれていますが、それでも 2 番目の値に移行するべきではありませんか?

詳細なコンテキストについては、各レコードが個別のデータベース (プライベートとパブリック) に格納され、param が nil のままの場合、私のクラスは両方が依存Downloadする 2 つの個別のデータベースを起動します。どちらの操作が失敗しても、最初の値に一致する結果が見つからず、2 番目の値をチェックする前に諦めます。CKQueryOperationsquerydatabase

「ダウンロード」の完全なコードと、必要に応じて失敗した単体テストを含めることができます。

4

2 に答える 2