当前位置: 首页 > 知识库问答 >
问题:

无法从Firebase正确检索数据

段干楚青
2023-03-14

这是我的第二个版本,我试图从Firebase检索代码,并用它做一些事情。这是我的第二种方式:

    channelRef?.observe(.childChanged, with: { (snapshot) -> Void in
        let update = snapshot.value as! Dictionary<String, AnyObject>
        var readyToGoValue: Bool?
        var userID: String?
        var amountOfPlayers: Int?
        var changedCreator: String?
        if let updatedReadyToGo = update["readyToGo"] as! Bool!{
            if updatedReadyToGo == true
            {
                readyToGoValue = true
            }
            else
            {
                readyToGoValue = false
            }
        }
        if let updateduserID = update["userID"] as! String!{
            userID = updateduserID
        }
        if let updatedAmountOfPlayers = update["currentPlayers"] as! Int!{
            amountOfPlayers = updatedAmountOfPlayers
        }
        if let updateduserID = update["userID"] as! String!{
            userID = updateduserID
        }
        if let updatedCreator = update["creator"] as! String!{
            changedCreator = updatedCreator
        }

        let currentUser = FIRAuth.auth()?.currentUser?.uid

        if changedCreator != nil
        {
            print("changed creator")
            self.creator = changedCreator!
        }

这将崩溃,并出现错误代码:

未能将类型“__NSCFString”(0x10A77F4A0)的值强制转换为“NSDictionary”(0x10A780288)。在“更新”行。这是我的第一次尝试:

    channelRef?.observe(.childChanged, with: { (snapshot) -> Void in
        let value = snapshot.value as? NSDictionary
        let readyToGoValue = value?["readyToGo"] as? Bool ?? false
        let userID = value?["userID"] as? String ?? ""
        var amountOfPlayers = value?["currentPlayers"] as? Int ?? 0
        let changedCreator = value?["creator"] as? String ?? ""
        print(snapshot)
        let currentUser = FIRAuth.auth()?.currentUser?.uid
        print(changedCreator)
        print(amountOfPlayers)
        if changedCreator != ""
        {
            print("changed creator")
            self.creator = changedCreator
        }
super.prepare(for: segue, sender: sender)
if let channel = sender as? Channel {
    let chatVc = segue.destination as! channelMultiplayerViewController
    chatVc.channel = channel
    chatVc.channelRef = channelRef.child(channel.id)
    chatVc.usersKey = userKey

}

打印更多数据

        print("path channel ref: " + "\(self.channelRef)")
        print("snapshot: " + "\(snapshot)")
        print("value: " + "\(value)")

-路径通道引用:可选(https://x.com/channels/-kegkajavh6upyasa7k4)

-快照:快照(创建者)新创建者

        if snapshot.key == "creator"
        {
            changedCreator = snapshot.value as! String
        }

另一个问题,和上面的完全一样,但是用第一个问题的解决方案,这个问题不会得到解决。当我试图获得第一个子节点,也就是第一个用户,并试图获得他们的用户ID时,什么都不起作用。我使用以下代码:

let firstChild = UInt(1)
                    self.channelRef?.queryLimited(toFirst: firstChild).observeSingleEvent(of: .value, with: { (snapshot) in
                        let value = snapshot.value as? NSDictionary
                        print(snapshot)
                        print(value)
                        let newCreator = value?.value(forKey: "userID") as? String

                        if newCreator != nil{
                            print("Got the userID")
                        }
                        if snapshot.key == "userID"
                        {
                            print("Got the userID")
                        }
                    })
Snap (-KeJWMiXaL-FGp0J7b3u) {
    "-KeJWO0V9kxgGnrACAtP" =     {
        PictureVersion = 2;
        readyToGo = 0;
        userID = SZlQ76RLCJQpFa0CDhrgFJoYzrs2;
        username = pietje;
    };
}
Optional({
    "-KeJWO0V9kxgGnrACAtP" =     {
        PictureVersion = 2;
        readyToGo = 0;
        userID = SZlQ76RLCJQpFa0CDhrgFJoYzrs2;
        username = pietje;
    };
})

并且打印出来,所以没有给出用户ID。这是为什么?用户ID就在那里!我看了医生,但应该有用...

共有1个答案

胡致远
2023-03-14

尝试将chatvc.channelref=channelref.child(channel.id)替换为chatvc.channelref=channelref

 类似资料:
  • 我有一个名为User的实体类,其中包含数据库的OneToMany列: 当我将用户插入数据库时,一切正常,他的汽车也被添加到user_cars表中。当检索汽车时,我得到这个异常: 我已经搜索了其他答案,但没有找到如何解决它。这就是我试图检索用户的方式。 问题是什么?我如何解决?我不明白后台发生了什么。

  • 我试图显示一个零件的"loc",如果它的零件号我给。以下是数据结构的样子: 活动代码: getLoc是Product类的getter函数,它返回给定curP对应的“loc”。curP部分表示子值。 逻辑对我来说似乎是正确的,但我没有得到输出。我哪里出了问题?

  • 我通过在方法之外添加一个简单的Ride实例来测试它,它工作得很好。 我还尝试将监听器更改为,结果相同。 Edit2:当我试图从数据库中检索整数时,我会得到一条错误消息。

  • 问题内容: 我正在法国学习,所以很难找到法语教程来解决我的问题。因此,我不得不问我的问题,希望有一个令人满意的解决方案。 我的问题是我在firebase上读取数据时遇到了麻烦,并且花了三天时间。 我有这样的结构: 我已经开始编写一些代码,可以恢复密钥,但是无法恢复这些值“ nom”,“ argent”等。 问题答案: John的替代方法是使用来获取每个属性:

  • 我是Flink的新手,今天我遇到了一个奇怪的情况。 我运行Kafka服务器,然后使用confluent producer发送消息。使用consumer,我得到了正确的信息,但在应用程序中,我不能。我使用此图像设置message broker 我用这个向Kafka服务器发送消息 我发送的消息是 我用这个来听Kafka的留言 这是我的密码 当我将kafka源代码更改为KafkaSource时 user