можно получить данные из базы данных внутри ячейки tableView? - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь получить данные из firebase и поместить их в tableViewCell. Очень похоже на уведомления Просмотр контроллера в Instagram. Где ячейка содержит имя, изображение и описание уведомления. Я могу получить данные, распечатать их как снимок внутри моей консоли, но если я вызову userArray.count внутри numberOfRowsInSection, раздел вернется пустым. Напротив, если бы я возвращал число, такое как 2, внутри numberOfRowsInSection, я мог бы успешно увидеть обзор.

, чтобы показать с изображениями

image 1

изображение выше, когда

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

       return 2
}

вызывается, но когда я звоню

   func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return userArray.count
}

, я получаю

image 2

Код, который я использую для вызова этой информации:

class UserModal {


       var userImage: String?
       var name: String?
       var review: String?

    init(userImage: String, name: String, review: String) {

        if let fromId = dictionary["fromId"] as? String {
           self.fromId = fromId
        }

        if let categoryLabel = dictionary["jobName"] as? String {
            self.category = categoryLabel
        }

        if let jobImage = dictionary["jobImage"] as? String {
            self.jobImage = jobImage
        }

    }


}

  var userArray = [UserRecentModal]()

     func fetchRecentsNSetupViews() {

 guard let currentID = Auth.auth().currentUser?.uid else { return }
 REVIEW_JOB.child(currentID).observe(.childAdded) { (snapshot) in
 guard let dictionary = snapshot.value as? Dictionary<String, AnyObject> else { return }

 guard let fromId = dictionary["fromId"] as? String else { return }
 guard let jobName = dictionary["jobName"] as? String else { return }
 guard let jobImageUrl = dictionary["jobImage"] as? String else { return }
//             self.imageView.loadImageUsingCacheWithUrlString(jobImageUrl)
   //
//        self.nameLabel.text = fromId
//  

  self.categoryLabel.text = jobName


    Database.fetchUser(with: fromId, completion: { (user) in
        if let postId = dictionary["fromId"] as? String {

            Database.fetchPoster(with: postId, completion: {(poster) in

                let array = UserModal(jobImage: jobImageUrl, fromId: fromId, category: jobName, dictionary: dictionary)
                self.userArr.append(array)

            })

        }
    })
    }
}

1 Ответ

0 голосов
/ 31 марта 2020

Когда вы звоните fetchRecentsNSetupViews()? Если вы вызываете его в методе cellForRowAt, вы столкнетесь с проблемами, поскольку во время настройки табличного представления вы не будете знать, когда данные из fetchRecentsNSetupViews() заполнят userArray.count. Таким образом, табличное представление может знать даже данные во времени, чтобы знать, что это 2 пользователя. Было бы лучше, если бы вы загрузили данные до того, как начнется настройка табличного представления.

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