2017-04-24 6 views
0

테이블 뷰의 각 셀마다 다른 값을로드하려고합니다. 현재 팀 ID로로드하고 현재 셀에 표시 한 다음 해당 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 만로드합니다. 위에서 언급 한 곳에서 중단 점을 배치하려고 시도했지만 두 번째 충돌 만 발생합니다. 별도의 참조가 필요하거나 부모 개체의 모든 값을로드하는 방법이 있습니까?

감사합니다.

추가 중포 기지의 구조 :

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를 셀에 넣을 수 있기 때문에 팀 ID를 올바르게 검색한다는 사실을 이미 알고 있습니다.

값 currentTeamID는 내가 이미로드 한 값이며 현재 셀의 잠재 팀의 ID (이름과 동일)입니다.

+0

입니다 얻을 , 부모 개체에서 모든 값을로드하는 방법이 있습니다. 그러나 파이어베이스 구조를 보지 않고 (텍스트로, 이미지 없음) 대답을 만드는 것은 어려울 것입니다. – Jay

+0

안녕하세요! 정말 고마워. 방금 firebase 구조체를 추가했는데 (분명히 써 보았습니다) 도움이된다면 설명을 추가하려고 했습니까? –

답변

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 
+0

정말 고마워요! –

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 
        } 
       }) 
    })