Загрузка данных из базы данных в табличное представление внутри ячейки коллекции - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть представление коллекции, где вы прокручиваете вертикально. Внутри каждой ячейки представления коллекции у меня есть табличное представление, которое состоит из комментариев. Я загружаю данные из Firebase и в представление коллекции, и в представление таблицы.

То, что я пытаюсь сделать, это загрузить конкретные данные и правильное количество строк в табличном представлении внутри ячейки коллекции на основе photoID из фотографии в ячейке моей коллекции. По сути, я хочу, чтобы правильные комментарии и правильные числа были в каждой табличной ячейке внутри каждой ячейки.

Проблема заключается в том, что комментарии не отображаются в нужных ячейках, а также количество разрядов в табличных представлениях. В разных ячейках представления коллекции неправильные значения.

в моем контроллере collectionview я использую этот 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)
}

тогда в ячейке.

    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

}

}

Представление коллекции работает нормально и так же, как и должно.

Это то, что я пробовал. (Это внутри коллекции viewcell)

 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
        }

фотография - это мой класс модели для всей информации, связанной с настройкой ячейки представления коллекции, за исключением представления таблицы. С помощью приведенного выше кода один конкретный комментарий, относящийся к одной конкретной картинке, иногда отображается на нескольких фотографиях.

Буду признателен за помощь в решении этой проблемы. Я могу себе представить, что это как-то связано с перезагрузкой табличного представления, а также с определением пути индекса в представлении коллекции.

Заранее спасибо.

С уважением, Wurzel

1 Ответ

0 голосов
/ 15 апреля 2019

Попробуйте удалить асинхронную функцию:

var comments = Комментарий

 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)
    }

Если это действительно проблема, я уточню подробнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...