我想要将此数据写入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: ""
答案 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_PLANITS
是DatabaseReference
到/PlanIt/plans
而_REF_ALL_IMAGES
是对/PlanIt/all_images
的引用。