我有一个显示用户帖子的UITableView
。该帖子包含post-image
,post-description
,post-owner-uid
,post-owner username
和post-owner profile picture
。当用户上传帖子时,它会将这5个对象保存到Firebase帖子节点。
let Post = Post(description: description, imgUrl: imgUrl, postOwnerUID: postOwnerUID, postOwnerName: postOwnerName, postOwnerImg: postOwnerImg)
然后,应用程序检索它并将其显示在tableCell
上。但是,我想问一下,保存Post
节点中的所有数据(甚至用户数据)或从User
节点检索用户数据的最佳做法是什么使用postOwnerUID
(用户uid )?如果是这样我怎么能这样做?
答案 0 :(得分:1)
如果在显示帖子时,您始终需要用户的名称,那么在Post节点中保留用户名称可能是有意义的。但是,您需要为每个帖子维护用户的名称。通过引用用户的uid,您只需在一个位置更新用户。
{
"posts": {
"p1": {
"owner": { "u1": true },
"description": "...",
"imgUrl": "http://..."
}
},
"user-posts": {
"u1": {
"p1": true
}
}
"users": {
"u1": {
"name": "John",
"imgUrl": "http://..."
}
}
}
您可以通过单独的请求获取您的帖子并检索其所有者。
let ref = FIRDatabase.database().referenceWithPath('posts')
ref.observeEventType(.ChildAdded, withBlock: { snapshot in
guard let json = snapshot.value as? [String:AnyObject] else { return }
let post = Post(...)
let uid = snapshot.childSnapshotForPath("owner").key
let ref = FIRDatabase.database().referenceWithPath('users/\(uid)')
ref.observeSingleEventOfType(.Value, withBlock: { snapshot in
let owner = Owner(...)
post.owner = owner
})
})
您还应该查看FirebaseUI-iOS,使用Firebase数据填充表格非常简单https://github.com/firebase/FirebaseUI-iOS