在查询之后,我收集了一个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)
但是,尽管回调列出了我预期的所有记录ID,但在检查仪表板后,所有项目仍然存在。
所以我通过一个块以不同的方式尝试了这个,我宁愿避免,因为它没有把工作放到一个操作中:
for recordID in recordIDsToDelete {
publicDB.deleteRecordWithID(recordID, completionHandler: {
(recordID: CKRecordID?, error: NSError?) -> Void in
print("deleted record id: \(recordID)")
print("error: \(error)")
})
}
这很有效。我当然可以从该代码中进行自己的操作,但似乎我遗漏了为什么已经存在的操作不起作用。
答案 0 :(得分:2)
在这里回答我自己的问题......
CKModifyRecordsOperation继承自CKDatabaseOperation,它具有默认为私有数据库的数据库属性,因此这些操作是在不同的数据库上执行的。我只是将数据库设置为公共数据库,这一切都有效:
operation.database = CKContainer.defaultContainer().publicCloudDatabase