【问题标题】:Cannot delete a record in CloudKit无法删除 CloudKit 中的记录
【发布时间】:2016-06-21 20:40:51
【问题描述】:

我正在为我的 iOS 应用程序使用 CloudKit。我创建了一种按 ID 删除记录的方法。

我的问题是重新安装应用后CKRecord没有被删除:当我重新安装应用并尝试删除CloudKit记录时,该方法成功执行(错误为nil)但记录仍在CloudKit中。

PS:只要我删除由同一个应用程序实例创建的记录,删除就可以正常工作。

   class func removeFavoriteEntryFromCloud(favoriteID id: String) {

    //Create the record
    let favoriteID = CKRecordID(recordName: id)

    privateDatabase.deleteRecordWithID(favoriteID) { (id: CKRecordID?, error: NSError?) -> Void in
        if error == nil {
            print("successfuly deleted record", id ?? "nil")
        }
    }

}

这是我在仪表板中的角色:

当然,我在设备上使用相同的 iCloud 用户帐户进行测试。

这是 CloudKit 开发环境中的错误吗?

【问题讨论】:

  • 我在文档中找到了这句话“如果你使用即时模式来填充数据库的记录,如通过保存记录创建数据库模式中所述,你可以重置开发环境之间运行您的应用程序。” link 也许开发环境是这样设计的:我需要在测试期间重置我的区域。

标签: ios swift cloudkit


【解决方案1】:
 func deleteRecordWithID(_ recordID: CKRecordID, completion: ((_ recordID: CKRecordID?, _ error: Error?) -> Void)?) {

    publicDatabase.delete(withRecordID: recordID) { (recordID, error) in
        completion?(recordID, error)
    }
}

func deleteRecordsWithID(_ recordIDs: [CKRecordID], completion: ((_ records: [CKRecord]?, _ recordIDs: [CKRecordID]?, _ error: Error?) -> Void)?) {

    let operation = CKModifyRecordsOperation(recordsToSave: nil, recordIDsToDelete: recordIDs)
    operation.savePolicy = .ifServerRecordUnchanged

    operation.modifyRecordsCompletionBlock = completion

    publicDatabase.add(operation)
}

我在我的 cloudKitManager 中使用这两种方法,它会在我刷新浏览器后立即删除我仪表板上的记录。与您所做的类似,#1 获取 recordID,#2 有一个 CKRecordID 的完成闭包,#3 处理错误,#4 完成 recordID 和错误。

Checkout CKModifyRecordsOperation 可以修改记录的字段。这是一个非常酷的操作,它还允许您使用此类的实例从数据库中永久删除记录

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    相关资源
    最近更新 更多