如何获取用户个人资料中的帖子? -迅捷&Firebase

时间:2018-08-31 22:44:34

标签: swift firebase fetch posts user-profile

尝试将用户的帖子提取到其个人资料中。 我正在使用collectionview显示数据,但是什么也没显示。

这是我用来通过其uid获取用户帖子的功能。这是我的Firebase数据库

enter image description here

    //variables firebase
    var currentUser = Auth.auth().currentUser
    let databaseRef = Database.database().reference()
    let storage = Storage.storage().reference()

    //VARS
    var postsuser = [ProfileUserPosts]()


 func observeUserPosts() {

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

        databaseRef.child("posts").queryOrdered(byChild: "timestamp").queryEqual(toValue: uid!).observe(.value) { (snapshot) in

            var tempPost = [ProfileUserPosts]()

            for child in snapshot.children {

                if let childSnapshot = child as? DataSnapshot {

                    let dict = childSnapshot.value as? [String: Any]
                    let address = dict!["address"] as? String
                    let breed = dict!["breed"] as? String
                    let phoneuser = dict!["phone"] as? String
                    let photoUrl = dict!["photoUrl"] as? String
                    let url = URL(string: photoUrl!)
                    let post = ProfileUserPosts(address: address!, breed: breed!, phone: phoneuser!, photoUrl: url!)
                    tempPost.insert(post, at: 0)

                }

                self.postsuser = tempPost
                self.postsCollectionView.reloadData()
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

让Firestore看一下。您可能会发现更好。无论如何,听起来您需要了解如何设计数据库。一旦这样做,获取/设置/更新/删除/查询就变得很简单。请参阅Best practices for data structure文档。

  

避免嵌套数据

     

由于Firebase实时数据库最多可嵌套32个级别的数据,因此您可能会认为   这应该是默认结构。但是,当您在以下位置获取数据时   数据库中的某个位置,还可以检索其所有子节点。   此外,当您授予某人在以下位置的节点上的读取或写入访问权限时   您的数据库,您还授予他们访问该节点下所有数据的权限。   因此,在实践中,最好保持数据结构平坦   尽可能。

     

平面数据结构

     

如果将数据拆分为单独的路径,也称为   非规范化,可以在单独的调用中进行有效下载,   根据需要。考虑一下这种扁平化的结构:

     

创建可扩展的数据

     

构建应用时,通常最好   下载列表的子集。如果列表很常见   包含数千条记录。当这种关系是静态的并且   单向,您可以简单地将子对象嵌套在   父母。

     

有时候,这种关系是动态的,或者可能是必要的   去规范化这些数据。很多时候,您可以通过   使用查询来检索数据的子集,如   检索数据。