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

问题描述 投票:0回答:1

试图将用户的帖子提取到他的个人资料中。我正在使用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()
            }
        }
    }
swift firebase fetch posts user-profile
1个回答
0
投票

给Firestore看看。你可能会发现它更好。无论如何,听起来您需要了解如何构建数据库。一旦你这样做,获取/设置/更新/删除/查询是微不足道的。请参阅Best practices for data structure文档。

Avoid nesting data

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

Flatten data structures

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

Create data that scales

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

有时,这种关系更具动态性,或者可能需要对此数据进行非规范化。很多时候,您可以通过使用查询来检索数据的子集来对数据进行非规范化,如检索数据中所述。

© www.soinside.com 2019 - 2024. All rights reserved.