如何更新云工具包中的数据

时间:2019-02-07 19:28:03

标签: ios swift cloudkit

我有一个包含两种记录类型的云工具包数据库:

  1. 人员名单
  2. 房间列表

居住在房间里的人不断变化。我有一个CKRecord。引用存储在引用一个房间的人员记录类型中。但是,此参考需要不断变化,因为占用房间的人不断变化。

我一直在努力尝试在不创建新记录的情况下更新参考。

我已尝试将CKRecordCkRecords的数组中拉出,以供人们使用,创建一个新的对我希望该人居住的房间的引用,并将此引用保存回该人记录,然后使用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)
}

1 个答案:

答案 0 :(得分:0)

解决方案只是添加一个保存策略。我使它变得比需要的复杂。

let a = [
  [1,2],
  [
    [3,4]
  ],
  [
    [[5],[6]]
  ]
];

const flatten = arr => arr.reduce((a, v) => {
  if (v instanceof Array) {
    return a.concat(flatten(v))
  } else {
    a.push(v);
    return a;
  }
}, [])


console.log(flatten(a));