无法转换类型' NSTaggedPointerString'到#NSDictionary'。斯威夫特/火力地堡

时间:2016-11-30 18:43:49

标签: ios swift firebase firebase-realtime-database

在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内部的内容并且数据存在且存在,但此转换或数据读取错误仍在继续。它与转换有关,但我并不完全确定。

2 个答案:

答案 0 :(得分:0)

snapshot.value as! String

在这种情况下,值是一个字符串,因此您必须转换为该字符串。

答案 1 :(得分:0)

可能是您更新了数据库,而旧数据的格式不正确,请尝试删除数据库,添加新数据,然后再次运行程序。