如何解决这个问题:“无法将'NSTaggedPointerString'类型的值(0x105d25e88)转换为'NSDictionary'(0x105d261a8)。”

时间:2018-01-27 15:38:36

标签: ios swift firebase

我正在使用具有以下结构的Firebase:

firebase structure here

当我点击保存的按钮时,这是写入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).

我无法弄清楚导致此问题的原因以及解决方法。有人可以建议吗?谢谢。

2 个答案:

答案 0 :(得分:0)

改变这个:

let snapshotValue = snapshot.value as! Dictionary<String,String>

进入这个:

 let snapshotValue = snapshot.value as! FIRDataSnapshot

点击此链接了解详情:https://firebase.google.com/docs/reference/ios/firebasedatabase/api/reference/Classes/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

感谢大家建议字典实际上是一个字符串,这让我得到答案。