尝试将用户的帖子提取到其个人资料中。 我正在使用collectionview显示数据,但是什么也没显示。
这是我用来通过其uid获取用户帖子的功能。这是我的Firebase数据库
//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()
}
}
}
答案 0 :(得分:0)
让Firestore看一下。您可能会发现更好。无论如何,听起来您需要了解如何设计数据库。一旦这样做,获取/设置/更新/删除/查询就变得很简单。请参阅Best practices for data structure文档。
避免嵌套数据
由于Firebase实时数据库最多可嵌套32个级别的数据,因此您可能会认为 这应该是默认结构。但是,当您在以下位置获取数据时 数据库中的某个位置,还可以检索其所有子节点。 此外,当您授予某人在以下位置的节点上的读取或写入访问权限时 您的数据库,您还授予他们访问该节点下所有数据的权限。 因此,在实践中,最好保持数据结构平坦 尽可能。
平面数据结构
如果将数据拆分为单独的路径,也称为 非规范化,可以在单独的调用中进行有效下载, 根据需要。考虑一下这种扁平化的结构:
创建可扩展的数据
构建应用时,通常最好 下载列表的子集。如果列表很常见 包含数千条记录。当这种关系是静态的并且 单向,您可以简单地将子对象嵌套在 父母。
有时候,这种关系是动态的,或者可能是必要的 去规范化这些数据。很多时候,您可以通过 使用查询来检索数据的子集,如 检索数据。