查询后,我收集了一组 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/