как правильно перезагрузить данные UICollectionView?

#ios #swift #uicollectionview

#iOS #swift #uicollectionview

Вопрос:

У меня есть массив UIImage по умолчанию и массив имен для метки и ImageView в моей collectionView ячейке. UIcollectionviews данные не изменятся после вызова reloadData() функции и изменения источников по умолчанию для label и ImageView, если я не прокручиваю каждую ячейку экрана и не прокручиваю назад, чтобы увидеть, что данные изменились.

 @IBOutlet weak var mycollectionview: UICollectionView!

var castNames = ["", "", "", "", ""]

var collectionviewimages = [UIImage(named: "pic"), UIImage(named: "pic"), UIImage(named: "pic"), UIImage(named: "pic"), UIImage(named: "pic")]

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    return castNames.count

    }

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: 
    "customcell", for: indexPath) as! MyCollectionViewCell

    cell.Initialize(image: collectionviewimages[indexPath.row]!, name: 
    castNames[indexPath.row])

    return cell
    }
}
  

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

 mycollectionview.reloadData()
  

Комментарии:

1. Предоставьте больше кода. В частности, где вы анализируете свои данные и вызываете mycollectionview.reloadData()

2. Скорее всего, вы вызываете reloadData в фоновом потоке.

3. @TomasJablonskis я уверен в своих новых данных перед вызовом reloadData() . Я напечатал новый массив и получил то, что ожидал. моя проблема в том, как отображаются новые данные.

4. метка в ячейке изменяется только при удалении из очереди и прокрутке экрана

5. установили ли вы источник данных collectionview и delegate = self

Ответ №1:

Всегда используйте reload Collectionview в главном потоке.

 dispatchQueue.main.async {
   self.mycollectionview.reloadData()
}
  

Ответ №2:

Попробуйте добавить это:

CollectionView.delegate = self

CollectionView.datasource = self

Комментарии:

1. уже сделано. Я считаю, что collectionview не будет загружаться без этих 2.