我有一个包含 2 种记录类型的云套件数据库:
- 人员名单
- 房间列表
占据房间的人不断变化。我有一个 CKRecord
.Reference 存储在引用其中一个房间的人员记录类型中。然而,这个引用需要不断变化,因为占据房间的人不断变化。
我一直在努力更新引用而不创建新记录。
我尝试从人们的CkRecords
数组中提取CKRecord
,创建一个对我希望该人占用并保存的房间的新引用将此引用返回到人员记录,然后使用 CKModifyRecordsOperation 对象保存它。
但是,这似乎在我的数据库中创建了一条新记录,而不是更新当前记录。
if providerAssignedRoom == nil {
self.roomAssignmentDelegate?.assignRoom(roomID: self.selectedRoomCKRecID, provider: provider, completion: self.transitionBackToRoot)
}
else {
let newProvider = self.searchCKRecArrayForProviderRef(providerRecID, self.providersCKRecsArray)
let reference = CKRecord.Reference(recordID:
self.selectedRoomCKRecID, action: .none)
newProvider[RecordTypes.providerEnum.assignedRoom] = reference
let operation = CKModifyRecordsOperation(recordsToSave: [record, newProvider], recordIDsToDelete: nil)
operation.completionBlock = {
print("record reference assigned to nil")
}
LaborFloorNamesDB.share.publicDatabase.add(operation)
}
最佳答案
解决方案只是添加一个保存策略。我让事情变得比需要的更复杂。
let providerToBeAssigned = self.providersArray[indexPath.item]
let providerToBeAssignedCKRef = self.findProviderCKRecordBasedOnProviderObject(provider: providerToBeAssigned)
var roomToBeReferenced: CKRecord {
let object = self.roomsAsCKRecsArray.filter {$0.recordID == self.selectedRoomCKRecID}
let value = object.first
return value!
}
if self.providerToBeRemoved != nil {
self.providerToBeRemoved![RecordTypes.providerEnum.assignedRoom] = nil
}
providerToBeAssignedCKRef![RecordTypes.providerEnum.assignedRoom] = CKRecord.Reference(record: roomToBeReferenced, action: .none)
let operation = CKModifyRecordsOperation(recordsToSave: [providerToBeAssignedCKRef!, self.providerToBeRemoved!], recordIDsToDelete: nil)
operation.savePolicy = .changedKeys
operation.completionBlock = {
print("record reference updated to cloud")
}
LaborFloorNamesDB.share.publicDatabase.add(operation)
关于ios - 如何更新云套件中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54580864/