2017-10-09 2 views
3

J'ai migré mon code d'application ios vers Swift 4 et la méthode de rechargement des données dans mes vues de collection ne fonctionne pas. J'ai cherché et essayé beaucoup de choses mais personne n'a travaillé. Cela fonctionnait parfaitement pendant plus d'un mois dans Swift 3, donc je ne sais pas ce qui se passe.Les données de rechargement UICollectionView ne fonctionnent pas dans swift 4

Ce code est pour l'un des cas:

private func setLevelLessons(){ 
     let operationsDB = DBOperations() 
     self.indexInformation = operationsDB.getIndex(forLevel: self.currentLevel) 
     self.numLessons = (self.indexInformation?.count)! 
     DispatchQueue.main.async { 
      self.lessonsCollectionView.reloadData() 
     } 
    } 

J'appelle cette fonction lorsque clique sur un bouton. Quand on clique, j'obtiens des données de la base de données et je recharge la vue de la collection. J'ai vérifié si les données sont correctes, donc ce n'est pas le problème.

I imprimé éléments lorsque la méthode suivante est appelée, et est appelé dans la première et la deuxième clic (deuxième pas nécessaire dans le bouton, peu importe où dans l'écran)

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 

Qu'est-ce qui pourrait arriver?

+0

Vérifiez votre compteur 'numOfRowAtIndexPath' retour –

+0

@SalmanGhumsani Cette valeur est correcte, je l'obtenir de variable' numLessons'. – CipherCit

+0

J'ai rencontré un effet similaire et pour moi, j'ai travaillé _ [collectionView.collectionViewLayout invalidateLayout] _ avant _ [collectionView reloadData] _. Dans mon cas le collectionview-viewcontroller (obj-c) est un contrôleur de vue enfant d'un contrôleur swift-view. – Apoc

Répondre

0

Problème résolu.

J'ai eu ce problème lors de la mise à jour de Swift4 et Xcode 9.0, mais aujourd'hui, je mise à niveau Xcode vers la version 9.0.1 (publié hier) et collectionView.reloadData() fonctionne à nouveau. Donc, si vous avez ce problème, assurez-vous d'avoir la dernière version de Xcode ou attendez la prochaine version.

+0

il est toujours dans Xcode 9.2, swift 4 –

0

Il s'agit d'une solution temporaire dans swift4 (Xcode 9).

DispatchQueue.main.async { 
    let numberOfItems = collectionView.numberOfItems(inSection: 0) 
    let indexPaths = [Int](0..<numberOfItems).map{ IndexPath(row: $0, section: 0) } 
    collectionView.reloadItems(at: indexPaths) 
} 
+0

Ne fonctionne pas Xcode 9.2, swift 4 –