无法加载tableview单元firebase的值

时间:2017-04-24 17:54:31

标签: ios swift firebase firebase-realtime-database

我试图在tableview中为每个单元格加载不同的值。目前,我加载一个teamID,将其显示在当前单元格上,然后使用该ID加载团队的其他属性。

    self.ref?.child("Teams").child(currentTeamID).child("Number").observeSingleEvent(of: .value, with: { (snapshot) in
                let number1 = snapshot.value as? Int
                if let teamNum = number1 {
                    Cell.teamNumber.text = "team " + String(teamNum)
                    //breakpoint
                }
            })
            self.ref?.child("Teams").child(currentTeamID).child("memberCount").observeSingleEvent(of: .value, with: { (snapshot) in
                let memcon = snapshot.value as? Int
                if let membercount = memcon {
                    Cell.userCount.text = "Members: " + String(membercount)
                    //breakpoint
                }
            })
        return Cell

尝试加载这些其他属性时出现问题。我应该这样做是一种不同的方式吗?现在它只加载第二个.observeSingleEvent我试过在上面指出的地方放置断点,但只有第二个被击中。我是否需要单独的引用,或者是否有从父对象加载所有值的方法?

非常感谢。

添加了Firebase结构:

ftc-scouting-app
    Teams
        Brophy Robotics
            Name: "Brophy Robotics"
            Number: "201"
            Password: "bronco"
            memberCount: 2
            memberList
                 member1: "5ilQc8KlrERLAmtFXjWaOZLIcoC3"
                 member2: "syV9SS6S9hY8PyKBOC0VQ3NNv0v2"

    Users
        5ilQc8KlrERLAmtFXjWaOZLIcoC3
            (User Info Values)
        syV9SS6S9hY8PyKBOC0VQ3NNv0v2
            (User Info Values

我尝试加载的值是团队编号和成员数。我希望将它们放在单元格中,因为它在每个用户拥有的每个团队中加载。所以,我只需要加载每个值并将其放在我的自定义表视图单元格中,该单元格包含所有字段。澄清 - 我已经知道它正确检索了团队ID,因为它能够将它放在单元格上。

值currentTeamID是我已经加载的值,是当前单元格的预期团队的id(与名称相同)。

2 个答案:

答案 0 :(得分:1)

首先,改变结构

ftc-scouting-app
    Teams
        Jyis9009kos0kslk  //should be generated with childByAutoId()
            Name: "Brophy Robotics"
            Number: "201"
            Password: "bronco"
            memberCount: "2"
            memberList:
                 5ilQc8KlrERLAmtFXjWaOZLIcoC3: true //uid as the key
                 syV9SS6S9hY8PyKBOC0VQ3NNv0v2: true

    Users
        5ilQc8KlrERLAmtFXjWaOZLIcoC3
            (User Info Values)
        syV9SS6S9hY8PyKBOC0VQ3NNv0v2
            (User Info Values)

然后,让我们只检索一个团队节点并获取一些数据

let teamsRef = self.ref.child("ftc-scouting-app").child("Teams")
let thisTeamRef = teamsRef.child("Jyis9009kos0kslk")

thisTeamRef.observeSingleEvent(of: .value, with: { snapshot in

    let teamDict = snapshot.value as! [String: AnyObject]

    let teamName = teamDict["Name"] as! String
    print(teamName)
    let memCount = teamDict["memberCount"] as! String
    print(memCount)
    let memberList = teamDict["memberList"] as! [String: AnyObject]

    for user in memberList {
        print(user.key)
    } 
})

,输出

Brophy Robotics
2
5ilQc8KlrERLAmtFXjWaOZLIcoC3
syV9SS6S9hY8PyKBOC0VQ3NNv0v2

答案 1 :(得分:0)

每个事件事件都是异步的。你应该在每次活动中使用完成块。

    func getNumber (completion: @escaping (String)->()){self.ref?.child("Teams").child(currentTeamID).child("Number").observeSingleEvent(of: .value, with: { (snapshot) in
                let number1 = snapshot.value as? Int
                if let teamNum = number1 {
                    completion(String(teamNum))
                }
            })}

     getNumber(completion: {(teamNum) in 
    self.ref?.child("Teams").child(currentTeamID).child("memberCount").observeSingleEvent(of: .value, with: { (snapshot) in
                    let memcon = snapshot.value as? Int
                    if let membercount = memcon {
                        Cell.teamNumber.text = "team " + teamNum
                        Cell.userCount.text = "Members: " + String(membercount)
                        //breakpoint
                    }
                })
    })