将子值更新到Firebase iOS并在其他节点中引用自动ID

时间:2018-06-09 21:12:57

标签: ios swift firebase firebase-realtime-database

我想要将此数据写入Firebase服务器。但是我在实际代码中遇到了以这种方式编写结构的复杂性。

我感到困惑的部分是将autoID(-LETR-XJvQsZCOpG-T1N)作为all_images和all_plan_deatils节点的参考。我无法找出编写此代码的最佳方法。任何建议都会有很大帮助。提前谢谢

PlanIt
 plans
  -LETR-XJvQsZCOpG-T1N
    Uid: "ZjtJdkjzuxc0mZn4u9TfWsXa9jh2"
    date: "20180609"
    title: "This weekend Plans?"
  -UYijs09as9jiosdijfi
    Uid: "some uid"
    date: "20180609"
    title: "some title"

 all_images:
    -LETR-XJvQsZCOpG-T1N
       image_0: "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.c.."
       image_1: "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.c.."

 all_plan_details
    -LETR-XJvQsZCOpG-T1N
       detail_0: "Bike Rodeo, Safety Presentation and Riding Tour o"
       detail_1: "Bike Rodeo, Safety Presentation and Riding Tour o"
  • 更新

这是我尝试更新节点的功能。我的思考过程是 - 我首先将计划标题和UID设置为自动标识。然后我尝试引用"键"这是由自动ID创建的,然后我尝试存储all_images& all_dates存储时引用了childByAutoID调用创建的同一个键,然后我更新这些值。

对于代码中的任何混乱或混乱,我很抱歉,我正在编辑事情,因为我们说话时某些名字可能会关闭,但我希望你能理解我想要尝试的一般想法。

func uploadPlanitData(plan: [String], withDate: [String], withImage: [String], withTitle: String, forUID uid: String, sendComplete: @escaping (_ status: Bool) -> ()) {


    _REF_PLANITS.childByAutoId().updateChildValues(["Planit Title" : withTitle, "uid": uid])


    let key = _REF_PLANITS.key

    let allImages = "all_images/\(key)/"

    let allDates = "all_dates/\(key)"

    let childUpdate = [allImages : withImage, allDates: withDate]
    _REF_ALL_IMAGES.updateChildValues(childUpdate)

    sendComplete(true)
}

更新 - 当前构建我的数据库的代码块就像这样 - 几乎是正确的 - 除了all_images& all_dates节点,而不是" planits" - 我希望那里有那把钥匙(-LEaaZrwYI_SqonuREV9)。这样我就有办法将每个图像和日期与他们所属的计划进行唯一分组

Planit
 Plans  
    -LEaaZrwYI_SqonuREV9
     senderId
     title: 


all_dates
 planits
 0: ""

 all_images
 planits
 0: ""

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望为新计划创建新密钥,然后使用相同密钥将信息存储在其他节点中。如果是这种情况,它看起来像这样:

let newPlanetRef = _REF_PLANITS.childByAutoId()
newPlanetRef.updateChildValues(["Planit Title" : withTitle, "uid": uid])

let key = newPlanetRef.key

let childUpdate = [allImages : withImage, allDates: withDate]
_REF_ALL_IMAGES.child(key).updateChildValues(childUpdate)

这假设_REF_PLANITSDatabaseReference/PlanIt/plans_REF_ALL_IMAGES是对/PlanIt/all_images的引用。