簡體   English   中英

僅獲取cloudkit中的特定字段?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM