ios - CKModifyRecordsOperation 不删除记录

标签 ios swift nsoperation cloudkit

查询后,我收集了一组 CKRecordID 对象,我希望将其从我的数据库中删除。它现在实际上包含数据库中每个对象的 ID,因此很容易看到那里何时有条目。

我首先尝试通过操作删除这些,如下所示:

let operation = CKModifyRecordsOperation(recordsToSave: nil, recordIDsToDelete: recordIDsToDelete)
operation.modifyRecordsCompletionBlock = {
    (savedRecords: [CKRecord]?, deletedRecordIDs: [CKRecordID]?, error: NSError?) in
    print("complete! deleted record IDs: \(deletedRecordIDs)")
}

self.operationQueue.addOperation(operation)

但是尽管收到了列出我预期的所有 recordID 的回调,但在仪表板上检查时所有项目仍然存在。

所以我通过不同的方式尝试了这个,通过一个 block ,我宁愿避免它,因为它不会将工作放入操作中:

for recordID in recordIDsToDelete {
    publicDB.deleteRecordWithID(recordID, completionHandler: {
        (recordID: CKRecordID?, error: NSError?) -> Void in
        print("deleted record id: \(recordID)")
        print("error: \(error)")
    })
}

这行得通。我当然可以根据该代码进行自己的操作,但似乎我遗漏了一些关于为什么现有操作不起作用的信息。

最佳答案

在这里回答我自己的问题...

CKModifyRecordsOperation 继承自 CKDatabaseOperation,后者具有默认为私有(private)数据库的数据库属性,因此这些操作是在不同的数据库上执行的。我只是将数据库设置为公共(public)数据库,一切正常:

operation.database = CKContainer.defaultContainer().publicCloudDatabase

关于ios - CKModifyRecordsOperation 不删除记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34045399/

相关文章:

ios - 续订/撤销 ios 分发证书 - 对临时用户的影响

ios - 快速传递方 block

swift - 在 Swift REPL 中导入 XCPlayground 模块

ios - 队列中的所有操作完成后立即释放 NSOperationQueue

iphone - setDelegate Queue 在 iOS5 上不起作用,但在 iOS 6 上运行良好

ios - NSOperationQueue 中类的对象 - 使用委托(delegate)的异步方法

ios - UIApplication.statusBarStyle 在 vi​​ewWillAppear 和 viewDidAppear 之间变化

ios - 使用 RxSwift 删除多个 UITableView 项目不适用于自定义单元格

ios - UrbanAirship iOS SDK - 是否有通知权限请求回调?

ios - 快速调整字体大小以适应静态 UITextView 的宽度和高度