我正在使用具有以下结构的Firebase:
当我点击保存的按钮时,这是写入firebase的代码:
let savedDB = Database.database().reference().child("saved")
let postid = detailpost?.postid
let uid = Auth.auth().currentUser?.uid
let key = savedDB.child(postid!).key
let childUpdates : [String : String] = ["\(uid!)/\(key)/": "true"]
savedDB.updateChildValues(childUpdates)
要尝试读取数据,这是我的代码:
if let uid = Auth.auth().currentUser?.uid{
let savedDB = Database.database().reference().child("saved").child(uid)
savedDB.observe(.childAdded) { (snapshot) in
let snapshotValue = snapshot.value as! Dictionary<String,String>
if let savedpostid = snapshotValue["postid"]{
......
当代码进入此步骤时,它会崩溃,并显示以下错误消息:
Could not cast value of type 'NSTaggedPointerString' (0x111688e88) to 'NSDictionary' (0x1116891a8).
我无法弄清楚导致此问题的原因以及解决方法。有人可以建议吗?谢谢。
答案 0 :(得分:0)
改变这个:
let snapshotValue = snapshot.value as! Dictionary<String,String>
进入这个:
let snapshotValue = snapshot.value as! FIRDataSnapshot
FIRDataSnapshot包含Firebase数据库位置的数据。每次阅读Firebase数据时,都会将数据作为FIRDataSnapshot接收。
答案 1 :(得分:0)
我通过将代码更改为以下内容来解决问题:
if let uid = Auth.auth().currentUser?.uid{
let savedDB = Database.database().reference().child("saved").child(uid)
savedDB.observe(.childAdded) { (snapshot) in
let savedpostid = snapshot.key
感谢大家建议字典实际上是一个字符串,这让我得到答案。