2016-03-08 101 views
2

我正在爲我的iOS應用使用CloudKit。我創建了一個按ID刪除記錄的方法。無法刪除CloudKit中的記錄

我的問題是,我重新安裝應用程序後不會刪除CKRecord:當我重新安裝應用程序並嘗試刪除CloudKit記錄時,該方法成功執行(錯誤爲零),但記錄仍在CloudKit中。

PS:只要刪除由同一應用程序實例創建的記錄,刪除工作正常。

class func removeFavoriteEntryFromCloud(favoriteID id: String) { 

    //Create the record 
    let favoriteID = CKRecordID(recordName: id) 

    privateDatabase.deleteRecordWithID(favoriteID) { (id: CKRecordID?, error: NSError?) -> Void in 
     if error == nil { 
      print("successfuly deleted record", id ?? "nil") 
     } 
    } 

} 

這裏是我的角色在儀表板:

Here are my Roles in dashboard

當然,我用的是同一個iCloud用戶帳戶爲我的測試設備上。

這是CloudKit開發環境中的錯誤嗎?

+0

我在文檔中找到了這個句子「如果您使用即時模式來填充具有記錄的數據庫,如如通過保存記錄創建數據庫架構中所述,您可以在應用運行之間重置開發環境。「 [link](https://developer.apple.com/library/mac/documentation/DataManagement/Conceptual/CloudKitQuickStart/EditingSchemesUsingCloudKitDashboard/EditingSchemesUsingCloudKitDashboard.html)也許開發環境是這樣設計的:我需要在測試期間重置我的區域。 – Romain

回答

0
func deleteRecordWithID(_ recordID: CKRecordID, completion: ((_ recordID: CKRecordID?, _ error: Error?) -> Void)?) { 

    publicDatabase.delete(withRecordID: recordID) { (recordID, error) in 
     completion?(recordID, error) 
    } 
} 

func deleteRecordsWithID(_ recordIDs: [CKRecordID], completion: ((_ records: [CKRecord]?, _ recordIDs: [CKRecordID]?, _ error: Error?) -> Void)?) { 

    let operation = CKModifyRecordsOperation(recordsToSave: nil, recordIDsToDelete: recordIDs) 
    operation.savePolicy = .ifServerRecordUnchanged 

    operation.modifyRecordsCompletionBlock = completion 

    publicDatabase.add(operation) 
} 

我在cloudKitManager使用這兩種方法,它只要我刷新瀏覽器中刪除我的儀表盤上的記錄。類似於你在做的事情,#1獲得recordID,#2有CKRecordID的完成關閉,#3處理錯誤,#4完成recordID和錯誤。

結帳CKModifyRecordsOperation可以修改記錄的字段。它是一個非常酷的操作,它還允許您使用此類的實例從數據庫中永久刪除記錄