Я пытаюсь загрузить разные значения для каждой ячейки в виде таблицы. В настоящее время я загружаю в teamID, отображаю его в текущей ячейке, а затем использую этот идентификатор для загрузки в другие атрибуты команды.

    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

Значения, которые я пытаюсь загрузить, это номер команды и количество участников. Я хочу поместить их в ячейку, поскольку она загружается в каждой команде каждого пользователя. Поэтому мне просто нужно загрузить каждое значение и поместить его в свою ячейку пользовательского табличного представления, в которой есть все поля для него. Чтобы уточнить - я уже знаю, что он правильно получает идентификатор команды, потому что он может поместить его в ячейку.

Значение currentTeamID является значением, которое я уже загрузил, и является идентификатором (совпадающим с именем) предполагаемой команды текущей ячейки.

0
David Krakauer 24 Апр 2017 в 20:54

2 ответа

Лучший ответ

Во-первых, измените структуру

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
Jay 25 Апр 2017 в 19:36

Каждое событие происходит асинхронно. Вы должны использовать блок завершения в каждом вашем событии.

    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
                    }
                })
    })
0
Dugong Kim 24 Апр 2017 в 18:41