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 番目の値をチェックする前に諦めます。CKQueryOperations
query
database
「ダウンロード」の完全なコードと、必要に応じて失敗した単体テストを含めることができます。