我有一个代码可以将多个内容保存到数据库中(照片ID,用户ID,用户名,密钥)
问题是,当我单击按钮保存该数据时,Firebase有时无法保存所有数据(有时无法一次保存照片ID,用户名或键或多项)
有时会成功,并将它们全部保存到数据库中
有什么问题,我该如何解决?
ref.child("requests").child("receiver").child((event?.userID)!).child("event").child(event!.key).child("requester").child(user!.uid).child("isRequesterAccepted").setValue(false)
ref.child("requests").child("receiver").child((event?.userID)!).child("event").child(event!.key).child("requester")
.child(user!.uid).child("name").setValue(name)
ref.child("requests").child("receiver").child((event?.userID)!).child("event").child(event!.key).child("requester")
.child(user!.uid).child("key").setValue(String(user!.uid))
ref.child("requests").child("receiver").child((event?.userID)!).child("event").child(event!.key).child("requester")
.child(user!.uid).child("profile_picture").setValue(String(user!.uid))
ref.child("requests").child("receiver").child((event?.userID)!).child("event").child(event!.key).child("requester")
.child(user!.uid).child("eventKey").setValue(event?.key)
答案 0 :(得分:0)
我不确定100%,但是可能的原因是在代码中使用了强制展开。
因此,请尝试重构一点:
guard let indeedEvent = event,
let indeedUser = user else {
return
}
ref.child("requests")
.child("receiver")
.child(indeedEvent.userID)
.child("event")
.child(indeedEvent.key)
.child("requester")
.child(indeedUser.uid)
.child("isRequesterAccepted")
.setValue(false)
ref.child("requests")
.child("receiver")
.child(indeedEvent.userID)
.child("event")
.child(indeedEvent.key)
.child("requester")
.child(indeedUser.uid)
.child("name")
.setValue(name)
ref.child("requests")
.child("receiver")
.child(indeedEvent.userID)
.child("event")
.child(indeedEvent.key)
.child("requester")
.child(indeedUser.uid)
.child("key")
.setValue(String(indeedUser.uid))
ref.child("requests")
.child("receiver")
.child(indeedEvent.userID)
.child("event")
.child(indeedEvent.key)
.child("requester")
.child(indeedUser.uid)
.child("profile_picture")
.setValue(String(indeedUser.uid))
ref.child("requests")
.child("receiver")
.child(indeedEvent.userID)
.child("event")
.child(indeedEvent.key)
.child("requester")
.child(indeedUser.uid)
.child("eventKey")
.setValue(indeedEvent.key)
答案 1 :(得分:0)
我不确定这是否是“正确”的答案,但也许会引导您找到答案。
几件事:
您可以将此代码大大简化
let ref = rootRef.child("requests").child("receiver").child((event?.userID)!).child("event").child(event!.key).child("requester").child(user!.uid)
let data = [
"isRequesterAccepted": false,
"key": String(user!.uid),
"profile_picture": String(user!.uid),
"eventKey": event?.key
]
ref.setValue(data)
而且,如前所述,您不能安全地解开可选项,因此可能是数据无效或不是预期的结果。
例如,这很危险
(event?.userID)!
事件可能为零,这将导致应用崩溃。
另外,这可能是个问题,您在这里表示,该事件肯定不是零。
event!.key
我还注意到您在两个节点中存储了相同的值-这可能是个问题
.child("key").setValue(String(user!.uid))
.child("profile_picture").setValue(String(user!.uid))