ios - Firebase 如何使用 childByAutoId() 保存多个 child

标签 ios swift firebase firebase-realtime-database

我需要保存一个对象,并在完成后将具有 autoId 的子项添加到同一对象。我目前正在保存第一个对象并在循环后添加带有 autoId 的子对象。我想知道是否有更有效的方法来做到这一点?

let data: [String: Any] = [
  "one": 1,
  "two": 2,
  "aboutS": "yeeah",
  ]

//Data to be saved with auto id after inital data saved
let mediaMetaData: [[String: Any]] = [
  ["path": "nda.mov", "type": "009"],
  ["path": "nda.mov", "type": "009"]
]

ref.getUserSkillDatabasePath(authUser).childByAutoId().setValue(data, withCompletionBlock: {
  error, dbReference in
  if error != nil {
    print(error as Any)
  }
  let mediaUploadGroup = DispatchGroup()

  //Loop through mediaMetaData and save children using auto id
  // Wish to save all children with auto id objects at once?
  mediaMetaData.forEach {
    meta in
    mediaUploadGroup.enter()
    dbReference.child("media").childByAutoId().setValue(meta, withCompletionBlock: {_,_ in
      mediaUploadGroup.leave()
    })
  }
  mediaUploadGroup.notify(queue: .main, execute: {
    completion(error)
  })
})

最佳答案

您可以尝试使用 updateChildValues 进行原子写入。所以这样做应该会达到相同的结果:

let data: [String: Any] = [
    "one": 1,
    "two": 2,
    "aboutS": "yeeah",
    ]

let mediaMetaData: [[String: Any]] = [
    ["path": "nda.mov", "type": "009"],
    ["path": "nda.mov", "type": "009"]
]

let userRef = ref.getUserSkillDatabasePath(authUser)
let userKey = userRef.childByAutoId().key

var dataObject: [String: Any] = data
for meta in mediaMetaData {
    let mediaKey = userRef.child(userKey).child("media").childByAutoId().key
    dataObject["/media/\(mediaKey)"] = meta
}

userRef.child(userKey).updateChildValues(dataObject, withCompletionBlock: { _,_ in
    print("Success")
})

关于ios - Firebase 如何使用 childByAutoId() 保存多个 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46736238/

相关文章:

javascript - Firebase:通过 REST 获取 token 并使用 signInWithCustomToken

ios - 在 Firebase 数据库 Swift 3 中访问嵌套子项

ios - <NSMutableURLRequest : 0x1c0c7ae0> { URL: (null) } in Objective C

ios - 有 xcode 7 - 需要 6.4 和命令行工具

ios - 如何隐藏UITabBar并显示UIToolBar?

ios - UIImageView - 拉伸(stretch)以适应问题

ios - 如何为多个设备实现核心蓝牙功能?

ios - 处理两个应用程序 :openURL:sourceApplication:annotation

ios - 了解有关解析最新 SDK/Swift 1.2 的语法问题

java - Gradle 未下载 Firebase?