如何删除 CKRecord

Posted

技术标签:

【中文标题】如何删除 CKRecord【英文标题】:How to delete a CKRecord 【发布时间】:2015-05-19 21:36:44 【问题描述】:

如何在客户端以编程方式从我的数据库中删除CKRecord

for record in records 
    if recordNumber < 13 
        let moodRecord:CKRecord = record as! CKRecord
        self.moodArray.append(moodRecord.objectForKey("Color") as! String)
    
    else if recordNumber > 13 
        // DELETE RECORD HERE
        record.delete(CKRecord)
        recordNumber--
    
    recordNumber++

【问题讨论】:

您查看过CKRecord 的文档吗?没有delete 功能。您应该阅读 CloudKit 用户指南。它涵盖了这一点。 Deleting data from cloudkit with swift的可能重复 【参考方案1】:

这不是您删除CloudKit 中记录的方式。以下是我删除应用中记录的方法:

let operation = CKModifyRecordsOperation(recordsToSave: nil, recordIDsToDelete: [record.recordID])
operation.savePolicy = .AllKeys
operation.modifyRecordsCompletionBlock =  added, deleted, error in
    if error != nil 
        println(error) // print error if any
     else 
        // no errors, all set!
    

CKContainer.defaultContainer().publicCloudDatabase.addOperation(operation)

【讨论】:

谢谢您的分配!有没有办法删除数据库中最早的记录? 每条记录都保存着元信息,包括它的创建时间。如果要删除最早的,查询或获取所有记录,按创建时间排序,然后删除最早的。【参考方案2】:

你可以使用

删除(withRecordID:completionHandler:)

apple docs

objc 版本:

[aDatabase deleteRecordWithID:rec.recordID completionHandler:^(CKRecordID * _Nullable recordID, NSError * _Nullable error) 
    ;
 ];

【讨论】:

【参考方案3】:
let database = CKContainer.default().publicCloudDatabase // or privateCloudDatabase

let recordID = someRecord.recordID
    
database.delete(withRecordID: recordID)  (ckRecordID, error) in

    if let error = error 
        print(error.localizedDescription)
        return
    
            
    guard let id = ckRecordID else 
        return
    

    print(id)

【讨论】:

以上是关于如何删除 CKRecord的主要内容,如果未能解决你的问题,请参考以下文章

如果由于网络连接不良而尚未完成创建,如何删除CKRecord?

快速从 Cloudkit 中删除 CKRecord

删除 CKRecord:记录删除将违反验证引用,拒绝更新

将已删除的 CKRecord 与 CoreData NSManagedObject 协调一致

在表视图或集合视图中删除与 IndexPath 关联的 CKRecord 的稳健方法是啥?

通过 CKSubscription 观察 CKRecord 删除不起作用