将Firebase中的数据加载到集合单元中的tableview中

时间:2019-04-15 19:54:38

标签: ios swift firebase uitableview uicollectionview

我有一个集合视图,您可以在其中垂直滚动。在每个集合视图单元中,我都有一个由评论组成的表格视图。我将数据从Firebase加载到集合视图和表视图。

我要执行的操作是基于收集单元格中照片的photoID,在收集单元格内的表格视图中加载特定数据和正确的行数。基本上,我希望每个collectionviewcell内的每个tableview都具有正确的注释和正确的行数

问题在于注释没有出现在正确的单元格中,并且表视图中的行数在不同的集合视图中也不正确。

在我的collectionviewcontroller中,我使用此Func来获取数据。

                 func fetchData(){
             let ref = Database.database().reference()
            ref.child("photos").observe(.childAdded, with: { (snapshot) in
        if let dictionary = snapshot.value as? [String: AnyObject]{
            let photo = Photo(dictionary: dictionary)
            photo.videoId = snapshot.key
            self.photos.append(photo)
            if let photoId = photo.videoId{
                self.photoTimeStampDictionary[photoId] = photo
            }
            DispatchQueue.main.async {
                self.cView.reloadData()
            }
            self.attemptReloadCollectionView()
        }
    }, withCancel: nil)
}

然后在cellforitem中

    let photo = photos[indexPath.row]
    cell.photo = photo
    return cell
     // I then use the photo variable inside my collectionviewcell.

这是我的数据库结构:

   **Comments**
                  **randomID**

                              [commenttext: "blabla"]
                              [uid: the senders UID]
                              [photo ID: the photoID]

    **Photos**

                  **photo ID**
                              [and some more info here ofc]

我的模型课。

                 class Comment: NSObject {
                 var commentId: String?
                 var commentText: String?
                 var photoId: String?
                 var timeStamp: NSNumber?
                 var uid: String?

init(dictionary: [String: AnyObject]) {
    self.commentId = dictionary["commentid"] as? String
    self.commentText = dictionary["commenttext"] as? String
    self.photoId = dictionary["photoid"] as? String
    self.timeStamp = dictionary["timestamp"] as? NSNumber
    self.uid = dictionary["uid"] as? String

}

}

收藏夹视图可以正常工作,并且应该正常工作。

这是我尝试过的。 (这是在collectionviewcell内部)

 var comments = [Comment]()

 func fetchData(){
    let ref = Database.database().reference()
    ref.child("comments").observe(.childAdded, with: { (snapshot) in
        if let dictionary = snapshot.value as? [String: AnyObject]{
            let comment = Comment(dictionary: dictionary)
             //   comment.commentId = snapshot.key
            self.comments.append(comment)
            DispatchQueue.main.async {
            self.commentsTableView.reloadData()
                }
            }
        }, withCancel: nil)
    }

,然后在cellforrow中:

        let comment = comments[indexPath.row]
        if comment.photoId == self.photo?.videoId{
            cell.commentText.text = comment.commentText
        }

照片是我的模型类,其中包括除tableview外的所有与设置collection view单元有关的信息。使用上面的代码,属于一张特定图片的一个特定注释有时会在几张照片上显示。

对于这个问题的帮助,我将不胜感激。我可以想象它必须与重新加载tableview并在集合视图中检测索引路径有关。

谢谢。

最好的问候, 毛泽尔

1 个答案:

答案 0 :(得分:0)

尝试删除异步函数:

var评论=评论

 func fetchData(){
    let ref = Database.database().reference()
    ref.child("comments").observe(.childAdded, with: { (snapshot) in
        if let dictionary = snapshot.value as? [String: AnyObject]{
            let comment = Comment(dictionary: dictionary)
             //   comment.commentId = snapshot.key
            self.comments.append(comment)
            self.commentsTableView.reloadData()
            }
        }, withCancel: nil)
    }

如果这确实是问题,我将进一步阐述。