Swift cloudkit CKFetchRecordZoneChangesOptions可以';不返回删除记录
我不知道为什么我不能在Swift cloudkit CKFetchRecordZoneChangesOptions可以';不返回删除记录,swift,icloud,record,cloudkit,Swift,Icloud,Record,Cloudkit,我不知道为什么我不能在CKFetchRecordZoneChangesOptions上获得任何删除记录,我可以获得创建和修改的记录,但是delete就是无法获得删除记录的功能。 在昨天,我可以正常得到删除变更记录 这是我的密码 public func handleNotification(whichNotification : Int) { zoneID = UserDataCustomZone.zoneID if #available(iOS 10.0, *) {
CKFetchRecordZoneChangesOptions
上获得任何删除记录,我可以获得创建和修改的记录,但是delete
就是无法获得删除记录的功能。在昨天,我可以正常得到删除变更记录 这是我的密码
public func handleNotification(whichNotification : Int) {
zoneID = UserDataCustomZone.zoneID
if #available(iOS 10.0, *) {
// Use the ChangeToken to fetch only whatever changes have occurred since the last
// time we asked, since intermediate push notifications might have been dropped.
var changeToken: CKServerChangeToken? = nil
let changeTokenData = UserDefaults.standard.data(forKey: serverChangeTokenKey)
if changeTokenData != nil {
changeToken = NSKeyedUnarchiver.unarchiveObject(with: changeTokenData!) as! CKServerChangeToken?
}
let options = CKFetchRecordZoneChangesOptions()
options.previousServerChangeToken = changeToken
let optionsMap = [zoneID!: options]
let operation = CKFetchRecordZoneChangesOperation(recordZoneIDs: [zoneID!], optionsByRecordZoneID: optionsMap)
operation.fetchAllChanges = true
// only can receive created and modified change record
operation.recordChangedBlock = { record in
//show record
print("check this out \(record)")
}
}
operation.recordZoneChangeTokensUpdatedBlock = { zoneID, changeToken, data in
print("print Token \(String(describing: changeToken))")
guard let changeToken = changeToken else {
return
}
let changeTokenData = NSKeyedArchiver.archivedData(withRootObject: changeToken)
UserDefaults.standard.set(changeTokenData, forKey: self.serverChangeTokenKey)
}
operation.recordZoneFetchCompletionBlock = { zoneID, changeToken, data, more, error in
guard error == nil else {
return
}
guard let changeToken = changeToken else {
return
}
let changeTokenData = NSKeyedArchiver.archivedData(withRootObject: changeToken)
UserDefaults.standard.set(changeTokenData, forKey: self.serverChangeTokenKey)
}
operation.fetchRecordZoneChangesCompletionBlock = { error in
guard error == nil else {
return
}
}
operation.qualityOfService = .utility
let container = CKContainer.default()
let db = container.privateCloudDatabase
db.add(operation)
} else {
// Fallback on earlier versions
}
}
我注意到您已经定义了一个处理程序,它足以接收记录创建和更新。但是,a通过其处理程序通知记录删除。宣言是:
var-recordWithIDWasDeletedBlock:((CKRecordID,String)->Void)?{get set}
因此,基本上您需要包括以下额外的行:
operation.recordWithIDWasDeletedBlock={recordID,recordType in…}
在原始代码中
请参阅以供参考
整个过程和参考代码可以在指南的章节中找到。我注意到您已经定义了一个处理程序,它足以接收记录创建和更新。但是,a通过其处理程序通知记录删除。宣言是:
var-recordWithIDWasDeletedBlock:((CKRecordID,String)->Void)?{get set}
因此,基本上您需要包括以下额外的行:
operation.recordWithIDWasDeletedBlock={recordID,recordType in…}
在原始代码中
请参阅以供参考
整个流程和参考代码可在指南章节中找到。当我在Cloudkit上删除数据时,我可以获得订阅远程通知。当我在Cloudkit上删除数据时,我可以获得订阅远程通知。