我想从Firebase数据库中加载当前用户的帖子。
这是我数据库的体系结构: 我已经成功地将所有帖子加载到了主视图中,但是当我尝试在此处进行重复并使用相同的方法进行必要的更改并将uid用于当前用户的帖子时,它什么也没显示。关于可能的问题,可以寻求帮助。
这是ProfileUserPosts swift文件的屏幕截图:
//VARS
var postsuser = [ProfileUserPosts]()
@objc func observeUserPosts() {
let uid = Auth.auth().currentUser?.uid
let postsRef = Database.database().reference().child("posts").child("author")
postsRef.queryOrdered(byChild: "userid").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]
//Post Picture
let photoUrl = dict!["photoUrl"] as? String
let url = URL(string: photoUrl!)
//Info Post
let comments = dict!["comments"] as? String
let city = dict!["city"] as? String
let municipality = dict!["municipality"] as? String
let breed = dict!["breed"] as? String
let phoneuser = dict!["phone"] as? String
let postType = dict!["postType"] as? String
let petType = dict!["petType"] as? String
let gender = dict!["gender"] as? String
let timestampadoption = dict!["timestamp"] as? Double
let date = Date(timeIntervalSince1970: timestampadoption!/1000)
let post = ProfileUserPosts(breed: breed!, phone: phoneuser!, photoUrl: url!, city: city!, municipality: municipality!, petType: petType!, gender: gender!, timestamp: date, postType: postType!, comments: comments!)
tempPost.insert(post, at: 0)
}
DispatchQueue.main.async {
self.postsuser = tempPost
self.postsCollectionView.reloadData()
self.refresher.endRefreshing()
}
}
}
}
在这里,我使用numberOfItemsInSection和cellForItem加载CollectionView
extension ProfileViewController: UICollectionViewDataSource,UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return postsuser.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell: PostsCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "postsCell", for: indexPath) as! PostsCollectionViewCell
cell.set(post: postsuser[indexPath.row])
return cell
}
}
答案 0 :(得分:0)
好吧,我的猜测-根据您的数据库结构-是您正在访问无效路径。
当您引用Database.database().reference().child("posts").child("author")
时,是说posts
有一个直接author
的孩子,但事实并非如此,他们是post id
的直接孩子,然后获取相应的post
,您可以获得author
,因此在这种情况下,您必须遍历所有帖子。
因此,要获取所有帖子:
let postsRef = Database.database().reference().child("posts")
然后您将有一个ID为键的帖子的对象(非常重要 -这不是数组),那么您将遍历他们并获取您想要的相应作者。我不会详细介绍您的实现,而只是澄清我在说什么:
let specificPostAuthor = postsRef.child("LOj1UZZgUnKa28xVtht").child("author")
将返回各自的帖子作者。