我目前有一个UITableView在单元格中显示Firebase数据库中的帖子。还有另一个UITableView,我想只显示登录用户的帖子。
这是我目前在UserPostViewController中的内容:
func loadData() {
let uid = FIRAuth.auth()?.currentUser?.uid
FIRDatabase.database().reference().child("posts").child(uid!).observeSingleEvent(of: .value, with: {
(snapshot) in
if let postsDictionary = snapshot.value as? [String: AnyObject] {
for post in postsDictionary {
self.userPosts.add(post.value)
}
self.userPostsTableView.reloadData()
}
})
}
// MARK: - Table view data source
func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// pass any object as parameter, i.e. the tapped row
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return self.userPosts.count
}
// Displays posts in postsTableView
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "UserCell", for: indexPath) as! PostTableViewCell
// Configure the cell...
let post = self.userPosts[indexPath.row] as! [String: AnyObject]
cell.titleLabel.text = post["title"] as? String
cell.priceLabel.text = post["price"] as? String
if let imageName = post["image"] as? String {
let imageRef = FIRStorage.storage().reference().child("images/\(imageName)")
imageRef.data(withMaxSize: 25 * 1024 * 1024, completion: { (data, error) -> Void in if error == nil {
let image = UIImage(data: data!)
cell.titleLabel.alpha = 0
cell.contentTextView.alpha = 0
cell.postImageView.alpha = 0
UIView.animate(withDuration: 0.4, animations: {
cell.titleLabel.alpha = 1
cell.contentTextView.alpha = 1
cell.postImageView.alpha = 1
})
} else {
print("Error occured during image download: \(error?.localizedDescription)")
}
})
}
return cell
}
这也是我在Firebase中的意思:
答案 0 :(得分:0)
Firebase是一个NoSQL数据库。试图在其上投射SQL实践,会让你感到悲伤。
不是存储一长串帖子,然后使用查询进行过滤,而是将用户特定节点下的每个用户的帖子存储起来。即。
users
$uid
username: "gabe"
posts
$uid
-K12348: {
description: "...."
image: "...."
}
现在,您可以使用直接访问读取来访问特定用户的帖子,而不是在不断增长的列表中查询:
FIRDatabase.database().reference().child("posts").child(uid!).observeSingleEvent(of: .value, with: {
(snapshot) in
if let postsDictionary = snapshot.value as? [String: AnyObject] {
for post in postsDictionary {
self.userPosts.add(post.value)
}
self.userPostsTableView.reloadData()
}
请在下次将您的JSON发布为文本,以便我可以将其复制/粘贴到我的答案中。