У меня есть UICollectionView
, вложенное в UITableViewCell
:
Число внутри ячейки представления коллекции обновляется в другом представлениипоэтому, когда я вернусь к этому экрану, я хочу иметь возможность обновить вид, и новые числа будут отражены в их ячейках.У меня есть модель с именем topUserModel
в представлении моей коллекции, в которую я заполняю данные из базы данных Firebase.Когда я опускаюсь, чтобы обновить, из моего основного представления таблицы запускается следующая функция:
@objc func refreshView(refreshControl: UIRefreshControl) {
DispatchQueue.main.async {
//this is the row that the collection view is in
if let index = IndexPath(row: 1, section: 0) as? IndexPath {
if let cell = self.homeTableView.cellForRow(at: index) as? TopUserContainerViewController {
cell.userCollectionView.reloadData()
}
}
}
refreshControl.endRefreshing()
}
, которая затем запускает мой awakeFromNib()
в режиме просмотра представления коллекции:
func fetchTopUsers() {
topUserModel.removeAll()
let queryRef = Database.database().reference().child("users").queryOrdered(byChild: "ranking").queryLimited(toLast: 10)
queryRef.observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String : AnyObject] {
let topUser = TopUser(dictionary: dictionary)
self.topUserModel.append(topUser)
}
DispatchQueue.main.async {
self.userCollectionView.reloadData()
}
})
}
noteпервое, что я делаю, это удаляю все данные из topUserModel
.После сохранения новых данных и добавления их (см. Выше) я могу распечатать значение этого целого числа в этом блоке кода на экране, и оно отобразится как обновленное значение.Однако в моем представлении коллекции (см. Ниже), если бы мне нужно было распечатать целочисленное значение в любой точке здесь (это называется watchTime
), оно все равно отображает старое значение, даже если topUserModel
было стерто и новые данныебыл добавлен?:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "topUserCell", for: indexPath) as! TopUsersViewController
if topUserModel.count > indexPath.row {
//image stuff redacted
Nuke.loadImage(
with: ImageRequest(url: url).processed(with: _ProgressiveBlurImageProcessor()),
options: options,
into: cell.topUserImage
)
cell.topUserName.text = topUserModel[indexPath.row].username
cell.topUserMinutes.text = "\(String(describing: topUserModel[indexPath.row].watchTime!))"
}
return cell
}