swift - 如何获取用户个人资料中的帖子?- 斯威夫特和火力基地
问题描述
试图将用户的帖子提取到他的个人资料中。我正在使用集合视图来显示数据,但没有显示任何内容。
这是我用来通过他们的 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()
}
}
}
解决方案
看看 Firestore。你可能会发现它更好。无论如何,听起来您需要了解如何构建数据库。一旦你这样做了,获取/设置/更新/删除/查询是微不足道的。请参阅数据结构文档的最佳实践。
避免嵌套数据
由于 Firebase 实时数据库允许嵌套数据最多 32 层,您可能会认为这应该是默认结构。但是,当您在数据库中的某个位置获取数据时,您还会检索其所有子节点。此外,当您授予某人对数据库中某个节点的读取或写入访问权限时,您还授予他们对该节点下所有数据的访问权限。因此,在实践中,最好保持数据结构尽可能平坦。
扁平化数据结构
如果数据被拆分为单独的路径,也称为非规范化,则可以根据需要在单独的调用中有效地下载它。考虑这个扁平结构:
创建可扩展的数据
在构建应用程序时,通常最好下载列表的子集。如果列表包含数千条记录,这尤其常见。当这种关系是静态且单向的时,您可以简单地将子对象嵌套在父对象之下。
有时,这种关系更加动态,或者可能需要对这些数据进行非规范化。很多时候,您可以通过使用查询来检索数据的子集来对数据进行非规范化,如检索数据中所述。
推荐阅读
- openssl - 在连接的 CRL 文件中输出所有 CRL
- r - 计算数据框行中零的百分比
- python - Tensorflow 2 中用于自定义训练循环的 Tensorboard
- android - 用于用户身份验证和登录的 FirebaseUI,未在显示屏中显示登录选项
- c# - CS0236 字段初始化程序无法引用非静态字段、方法或属性“corona.line”
- android-studio - Android Studio + Flutter 打不开
- docker - 通过在 url 添加 /organizationx 路径来分隔具有相同域名的网站
- python - 迭代具有相同总和的固定大小正整数列表的算法
- spring - 登录用户的 WebServlet 列表
- visual-studio-code - vscode - 支持模式验证的选项