ios - 如何更新云套件中的数据

标签 ios swift cloudkit

我有一个包含 2 种记录类型的云套件数据库:

  1. 人员名单
  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/

相关文章:

ios - UITableViewController scrollViewDidScroll : not called during cell removal

ios - 如何调整我的约束,以便仅当用户滚动 UITableView 时才显示我的 UITextView?

ios - 如何通过 UIDocumentInteractionController 共享多个文件?

ios - textFieldShouldBeginEditing 不会在 Swift 1.2 中触发正确的文本字段

ios - 将 UITextField 的 textContentType 设置为 creditCardNumber 会覆盖 keyboardType 设置吗?

ios - 来自 CloudKit 的推送通知未正确同步

ios - Swift:触发 TableViewCell 以导致另一个 ViewController 中的 UIWebView 中的链接

ios - 断开连接后,一旦建立 Internet 连接,Apple 的天气应用程序就会获取。除了 while 循环之外,还有更好的方法吗?

swift - CloudKit,加入或将项目添加到列表的有效方法

ios - 使用 CKSubscription/CKNotificationInfo 显示通知特定消息?