如何使用查询快速获取 cloudkit 数据

Posted

技术标签:

【中文标题】如何使用查询快速获取 cloudkit 数据【英文标题】:How to use query to fetch cloudkit data in swift 【发布时间】:2016-08-17 18:37:45 【问题描述】:

我试图将所有用户的位置存储在cloudkit 中,然后由每个设备下载。我在storeLocation 的代码上标记了错误:

“无法将类型 '(NSError?, [CKRecord]?)' (aka '(Optional, Optional>)') 的值转换为预期的参数类型 '(error: NSError?, records: [CKRecord]?) - > 无效'"

//saves location in cloud kit //currently works well:

var locArray = [CKRecord]()
func storeLocation(location:CLLocation) 
        let locationRecord = CKRecord(recordType: "location")
        locationRecord.setObject(location, forKey: "location")
        let publicData = CKContainer.defaultContainer().publicCloudDatabase
        publicData.saveRecord(locationRecord)  (records, error) in
            if error != nil 
                print("error saving locations: \(error)")
             else 
                print("Locations saved: \(records)")
                loadLocation((error, self.locArray)) //where I get error******
            
        
    

//fetches location from cloud kit:

func loadLocation(completion: (error:NSError?, records:[CKRecord]?) -> Void)

    let query = CKQuery(recordType: "Location", predicate: NSPredicate(value: true))
    CKContainer.defaultContainer().publicCloudDatabase.performQuery(query, inZoneWithID: nil)
        (records, error) in
        if error != nil 
            print("error fetching locations")
            completion(error: error, records: nil)
         else 
            print("found locations: \(records)")
            completion(error: nil, records: records)
        
    

【问题讨论】:

我在你原来的问题@caleb 上回答了这个问题。 :) 【参考方案1】:

我相信而不是:

loadLocation((error, self.locArray))

你需要这样称呼:

loadLocation()  (error, records) in
    // do something here with the returned data.

【讨论】:

以上是关于如何使用查询快速获取 cloudkit 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从 CloudKit 查询和获取数据?

我如何通过其记录名称查询 CloudKit 以获取特定记录?

使用 NSPredicate 查询 CloudKit 以获取空白(或 null 或其他)的日期

如何在 CloudKit JS 中查询元数据?

如何获取当前用户创建的所有 CloudKit 记录?

如何获取 CloudKit 的实际配额?