[英]Fetch only specific fields in cloudkit?
我想在CloudKit中的Musics記錄中僅獲取Song_Name字段。 我正在嘗試下面的代碼,但它仍然取得音樂記錄中的所有字段。 我想我需要使用publicDB.add(operation)方法編譯操作,但它不允許我像現在使用publicDB.perform(query,in ....)一樣聲明“結果”
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "Musics", predicate: predicate)
let operation = CKQueryOperation(query: query)
operation.desiredKeys = ["Song_Name"]
publicDB.perform(query, inZoneWith: nil) { [unowned self] results, error in
guard error == nil else {
DispatchQueue.main.async {
self.delegate?.errorUpdating(error! as NSError)
print("Cloud Query Error - Refresh: \(error)")
}
return
}
self.items_music.removeAll(keepingCapacity: true)
for record in results! {
let music = Musics(record: record, database: self.publicDB)
self.items_music.append(music)
}
DispatchQueue.main.async {
self.delegate?.modelUpdated()
}
}
}
您正在創建CKQueryOperation
並設置操作的desiredKeys
屬性,但您沒有使用此操作。 您只需對數據庫執行查詢,因此不會使用任何查詢操作的屬性。
您需要為操作分配記錄獲取塊和查詢完成塊,然后將操作添加到數據庫以實際運行它。
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "Musics", predicate: predicate)
let operation = CKQueryOperation(query: query)
operation.desiredKeys = ["Song_Name"]
var newItems = [Musics]()
operation.queryCompletionBlock = ( { (cursor, error)->Void in
guard error == nil else {
DispatchQueue.main.async {
self.delegate?.errorUpdating(error! as NSError)
print("Cloud Query Error - Refresh: \(error)")
}
return
}
self.items_music = newItems
DispatchQueue.main.async {
self.delegate?.modelUpdated()
}
})
operation.recordFetchedBlock = ( { (record) -> Void in
let music = Musics(record: record, database: self.publicDB)
newItems.append(music)
})
publicDB.add(operation)
我省略了一些你需要的代碼來檢查提供給完成塊的cursor
。 如果這不是nil
那么您需要發出另一個查詢來獲取其他項目
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.