首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对iCloud的保存、更新或任何操作都不适用于即席或应用程序配置文件。

对iCloud的保存、更新或任何操作都不适用于即席或应用程序配置文件。
EN

Stack Overflow用户
提问于 2017-03-26 14:51:42
回答 1查看 128关注 0票数 1

在我的应用程序中,在发布模式下保存或更新CKRecords到iCloud (使用即席应用程序配置文件构建)不起作用。

在功能中创建默认容器,并找到下面附加的屏幕快照。

代码语言:javascript
复制
let container = CKContainer.default
var privateDatabase: CKDatabase?
var currentRecord: CKRecord?
var photoURL: URL?
var recordZone: CKRecordZone?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    privateDatabase = container().privateCloudDatabase
    recordZone = CKRecordZone(zoneName: "HouseZone")

    privateDatabase?.save(recordZone!,
                          completionHandler: {(recordzone, error) in
                            if (error != nil) {
                                self.notifyUser("Record Zone Error",
                                                message: "Failed to create custom record zone.")
                            } else {
                                print("Saved record zone")
                            }
    }) 
}


@IBAction func saveAction(_ sender: Any) {

    if let img = selImageView.image{
        photoURL = self.saveImageToFile(img)
    }


    let asset = CKAsset(fileURL: photoURL!)
    let myRecord = CKRecord(recordType: "Houses",
                            zoneID: (recordZone?.zoneID)!)

    myRecord.setObject(addressTextField.text as CKRecordValue?,
                       forKey: "address")

    myRecord.setObject(descriptionTextView.text as CKRecordValue?,
                       forKey: "comment")

    myRecord.setObject(asset, forKey: "photo")


    let modifyRecordsOperation = CKModifyRecordsOperation(
        recordsToSave: [myRecord],
        recordIDsToDelete: nil)

    if #available(iOS 10.0, *) {
        modifyRecordsOperation.timeoutIntervalForRequest = 10
    } else {
        // Fallback on earlier versions
       // modifyRecordsOperation.timeoutIntervalForRequest = 10
    }

    modifyRecordsOperation.modifyRecordsCompletionBlock =
        { records, recordIDs, error in
            if let err = error {
                self.notifyUser("Save Error", message:
                    err.localizedDescription)
            } else {
                DispatchQueue.main.async {
                    self.notifyUser("Success",
                                    message: "Record saved successfully")
                }
                self.currentRecord = myRecord
            }
    }
    privateDatabase?.add(modifyRecordsOperation)
}

以上代码是在调试模式下工作的。当我生成带有Ad配置文件的构建时,不起作用。

向appstore提交应用程序并尝试,但仍未工作。请建议,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-26 20:06:40

好的,我已经重复了两次这个错误--对我来说,是因为我给CKRecord添加了新的字段,但是没有将开发CloudKit数据库部署到生产中。

原因是,当CKRecord有新的字段时,开发数据库就会自动更新,但在您进行显式部署之前,它不会进入生产阶段。因此,在Prod环境中,由于未知字段,对数据库的写入将被拒绝。

要修复它,请转到CloudKit仪表板,确保它在开发环境中,然后单击deployed,您应该会看到要部署的新字段。在部署之后,它应该马上就能工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43030275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档