在Firebase中收听新对象时,我收到此错误:无法将NSTaggedPointerString
类型的值转换为NSDictionary
。以下是侦听已注册用户的代码。
FIRAuth.auth()!.addStateDidChangeListener { auth, user in
guard let user = user else { return }
self.user = User(authData: user)
let userref = FIRDatabase.database().reference(withPath: "users").child(self.user.uid)
userref.observe(.value, with: { snapshot in
print(snapshot.value!)
var newItems: [UserItem] = []
for item in snapshot.children {
let userDetail = UserItem(snapshot: item as! FIRDataSnapshot) /////////// CRASHES HERE //////////
newItems.append(userDetail)
}
self.userItem = newItems
})
print(self.user.uid)
}
当错误出现时,它指向:
init(snapshot: FIRDataSnapshot) {
key = snapshot.key
let snapshotValue = snapshot.value as! [String:Any] ///// ERROR HERE
name = snapshotValue["name"] as! String
email = snapshotValue["email"] as! String
age = snapshotValue["age"] as! String
ref = snapshot.ref
}
控制台正在正确打印Firebase内部的内容并且数据存在且存在,但此转换或数据读取错误仍在继续。它与转换有关,但我并不完全确定。
答案 0 :(得分:0)
说
snapshot.value as! String
在这种情况下,值是一个字符串,因此您必须转换为该字符串。
答案 1 :(得分:0)
可能是您更新了数据库,而旧数据的格式不正确,请尝试删除数据库,添加新数据,然后再次运行程序。