` let query = ref?.child("Reviews").queryOrdered(byChild: "UserID").queryEqual(toValue: myUser.userId)
query?.observeSingleEvent(of: .value) { snapshot in
for child in snapshot.children {
let snap = child as! DataSnapshot
let dict = snap.value as! [String: Any]
let uid = dict["UserID"] as! String
let review = dict["Body"] as! String
let rating = dict["Rating"] as! String
let titleID = dict["TitleID"] as! String
let reviewID = dict["ReviewID"] as! String
let ratingID = dict["RatingID"] as! String
`
对数据库的ratingID调用发生错误。它解开了零。
我正在尝试使用新的键/值来修改现有的Firebase数据库。
然后,我尝试在表视图中显示条目,并且由于返回nil的包装而崩溃。我知道为什么会这样,这是因为先前的数据没有新的键/值,我想将其包含在以后的节点中。我尝试了很多不同的事情,例如让和让走而没有太多的财富。如何添加新键/值,并且仍然让tableview读取不具有新值的条目?
我包括当前节点的图像,并且想向该节点添加“ RatingsID”。当我这样做时,我得到了unnwrap nil错误。
新键/值之前的数据库节点
最佳答案
您的代码非常接近,只需要保护代码,以防不存在ratingID密钥。
所以改变
let ratingID = dict["RatingID"] as! String
至
let ratingID = dict["RatingID"] as! String ?? ""
因此,如果RatingID节点不存在,则可以将ratingID设置为空字符串(或所需的任何字符串)
您也可以将其编码为仅在该节点存在时对键的值进行操作(不为nil)
if let someVal = dict["xxx"] {
//do something with someVal
} else {
print("xxx node wasn't found")
}
这是一个完整的示例:我们正在从message节点读取一些消息,其中一些具有test_key节点,而另一些则没有。对于那些没有,默认字符串被分配来测试
let postsRef = self.ref.child("messages")
postsRef.observe(.childAdded) { snapshot in
let dict = snapshot.value as! [String: Any]
let msg = dict["msg"] as! String
let test = dict["test_key"] ?? "default string"
print(msg, test)
}