CKModifyRecordsOperation 不删除记录

CKModifyRecordsOperation not deleting records

查询后,我收集了一组 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 的回调,但在仪表板上检查时所有项目仍然存在。

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

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

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

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

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

operation.database = CKContainer.defaultContainer().publicCloudDatabase