【问题标题】:How to overwrite CloudKit existing data in Swift?如何在 Swift 中覆盖 CloudKit 现有数据?
【发布时间】:2016-08-23 02:49:45
【问题描述】:

我必须覆盖 CloudKit 中的现有数据

我曾尝试使用saveRecord,但它对我不起作用。

就我而言,我只需要覆盖单个数据。

那我该怎么办?

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
    if locationEnable == true {
    if loaded == true {
        let location = locations.last! as CLLocation

        let location2 = locations.last!
        var a:String?
        if(Data.count != 0 ){ a = Data[0].valueForKey("identity") as? String}
        else {a = Data3!.valueForKey("identity") as? String}
        let id = CKRecordID(recordName: a!)
        let locationRecord = CKRecord(recordType: "Driver", recordID: id)
        locationRecord.setObject(location2, forKey: "X")
        locationRecord.setObject(a!, forKey: "Identity")
        AddRecordToCloud(locationRecord)
    }
    if UIApplication.sharedApplication().applicationState != .Active {
        print("Background Updating")
    }
    }
}
func AddRecordToCloud(record:CKRecord){
        let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase
        publicDatabase.saveRecord(record, completionHandler: { (record:CKRecord?, error:NSError?) -> Void in
            if(error != nil){print("error:\(error)")}
            else {print("saving")}
        })
    }

这是错误:

error:Optional(<CKError 0x7fb858f5ba80: "Server Record Changed" (14/2004); server message = "record to insert already exists";

【问题讨论】:

  • 使用相关代码和您遇到的问题的详细信息更新您的问题。
  • 请不要重复your own post.
  • 我刚刚更新了谢谢:)
  • 好的,现在有代码了。你有什么问题?说“它真的不起作用”是没有帮助的。以什么方式不起作用?如果出现错误,请使用打印错误的输出更新您的问题。
  • @JeanLeMoignan 尝试使用 CKOperation 会解决的

标签: swift cloudkit overwrite


【解决方案1】:

您必须获取记录,然后更改其中的数据并保存相同的记录。

【讨论】:

  • 我得到这个错误错误:可选(“错误保存记录 defaultZone:__defaultOwner_)> 到服务器:保护数据没有匹配”)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 2014-04-06
相关资源
最近更新 更多