>

Firebase 데이터베이스에서 모든 게시물을 가져 오는 코드가 있습니다. 코드가 특정 사용자 ID의 모든 게시물을 가져 오도록하려고합니다. 내 데이터베이스의 구조는 사용자 ID에 연결된 게시물 ID 세트가 있다는 것입니다.

모든 게시물을 가져와야하는 코드 :

DataService.ds.REF_POSTS.observe(.value, with: { (snapshot) in
    self.posts = []
    if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
        for snap in snapshot {
            print("SNAP: \(snap)")
            if let postDict = snap.value as? Dictionary<String, AnyObject> {
                let key = snap.key
                let post = Post(postKey: key, postData: postDict)
                self.posts.append(post)
            }
        }
    }
    self.feedTableView.reloadData()
})

현재 사용자를 식별하는 방법 :

_ = Auth.auth().addStateDidChangeListener { (auth,user) in
            if let user = user {
                let userId = user.uid
                print("USER: \(String(describing: userId))")
                let newPost = DataService.ds.REF_USERS.child("\(userId)").child("posts")
                //print("NEW POST: \(newPost.child)")
                newPost.setValue([userPost : true])
            }
        }

사용자 개체의 자식 (게시물)에 도착한 다음 게시물을 순환해야하는 것 같습니다. 로그인 한 사용자와 관련된 게시물을 어떻게 반복하고 변경 사항을 관찰 할 수 있습니까?

편집 (모든 사용자의 게시물을 순환하려고 시도 함) :

_ = Auth.auth().addStateDidChangeListener { (auth,user) in
    if let user = user {
        let userId = user.uid
        print("USER: \(String(describing: userId))")
        let newPost = DataService.ds.REF_USERS.child("\(userId)").child("posts")
        newPost.observe(.value, with: { (snapshot) in
            self.posts = []
            if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
                for snap in snapshot {
                    print("ERIC SNAP: \(String(describing: snap.value))")
                    if let postDict = snap.value as? Dictionary<String, AnyObject> {
                        let key = snap.key
                        let post = Post(postKey: key, postData: postDict)
                        self.posts.append(post)
                    }
                }
            }
            self.feedTableView.reloadData()
        })
        //print("NEW POST: \(newPost)")
    }
}

  • 답변 # 1

    로그인 된 사용자의 게시물을 얻는 방법은 다음과 같습니다 :

    guard let uid = Auth.auth().currentUser?.uid else {
                return
            }
            print("USER ID: \(uid)")
            let newPost = DataService.ds.REF_USERS.child("\(uid)").child("posts")
            newPost.observe(.value, with: { (snapshot) in
                self.posts = []
                if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
                    for snap in snapshot {
                        let postData = DataService.ds.REF_POSTS.child(snap.key)
                        postData.observe(.value, with: { (snapshot) in
                            if let postDict = snapshot.value as? Dictionary<String, AnyObject> {
                                let key = snapshot.key
                                let post = Post(postKey: key, postData: postDict)
                                self.posts.append(post)
                            }
                            self.feedTableView.reloadData()
                        })
                    }
                }
            })
    
    

  • 이전 javascript - AngularJS 및 부트 스트랩 탭 동작이 작동하지 않습니다
  • 다음 javascript - 각도 6 - addcontrol을 사용하여 하위 양식 그룹 추가