CKModifyRecordsOperation不删除记录

时间:2015-12-02 14:36:17

标签: 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)

但是,尽管回调列出了我预期的所有记录ID,但在检查仪表板后,所有项目仍然存在。

所以我通过一个块以不同的方式尝试了这个,我宁愿避免,因为它没有把工作放到一个操作中:

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

这很有效。我当然可以从该代码中进行自己的操作,但似乎我遗漏了为什么已经存在的操作不起作用。

1 个答案:

答案 0 :(得分:2)

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

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

operation.database = CKContainer.defaultContainer().publicCloudDatabase