web-dev-qa-db-fra.com

Impossible de transtyper la valeur de type 'UICollectionViewCell'

J'utilise un UICollectionViewCell personnalisé dans mon Storyboard . Lorsque je lance l'application, le message suivant s'affiche: 

Could not cast value of type 'UICollectionViewCell' to TestProject.CollectionViewCell.

48
coco

Le modèle d'un CollectionViewController dans Xcode est fourni avec cette ligne de code dans viewDidLoad, qui modifie la spécification de votre storyboard.

// Register cell classes
self.collectionView!.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)

Supprimez simplement cette ligne.

Dans les anciennes versions de Swift, la ligne est la suivante:

// Register cell classes
self.collectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
177
coco

Je suis confronté à ce problème car, dans viewDidLoad(), j'ai enregistré ma cellule avec UICollectionViewCell class. Dans ma cellForItemAtIndexPath utilisé CustomSubcalssCollectionViewCell pour dequeueReusableCell. 

assurez-vous que registerClass et dequeueReusableCell appartiennent à la même classe pour résoudre le problème

self.registerClass(SomeUICollectionCellClass.self, forCellWithReuseIdentifier: reuseIdentifier)

let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! SomeUICollectionCellClass
45
Stephen Chen

J'ai reçu cette erreur lorsque la classe personnalisée (sur l'inspecteur Xcode) avait toujours sa classe définie sur la valeur par défaut UICollectionViewCell plutôt que ma classe personnalisée pour TestProject.CollectionViewCell.

Pour résoudre ce problème, changez simplement la classe personnalisée en fonction de votre implémentation.

 Custom Class Section

 Document Outline

5
KKG

J'ai rencontré cette erreur lors de l'instanciation d'une ViewController à partir d'un storyboard dans mon test unitaire. 

storyboard.instantiateViewControllerWithIdentifier("someVC") as! MyViewController

Le problème était que j'avais assigné un module spécifique dans l'inspecteur d'identité à ce VC dans le scénarimage. Je l'ai enlevé pour qu'il utilise par défaut le module actuel, à savoir le module d'application en cours d'exécution et le module Test en cours de test.

4
Sebastian
 self.collectionView!
     .register(MyCollectionViewCell.self, 
               forCellWithReuseIdentifier: reuseIdentifier
              )

Vous n'êtes pas obligé de supprimer cette ligne. Vous allez enregistrer votre propre classe de cellule héritée de UICollectionViewCell.self si vous souhaitez enregistrer une classe à l'aide de code 

1
Umair Khalid

Vous obtiendrez cette erreur si vous enregistrez votre classe de cellules à la fois dans Storyboard et dans le code. Choisissez l’un ou l’autre, jamais les deux et le problème disparaîtra.

J'aimerais que Apple n'inclue pas ce morceau de code dans ses modèles:

self.registerClass(SomeUICollectionCellClass.self, forCellWithReuseIdentifier: reuseIdentifier)

D'autant plus qu'ils vous recommandent toujours d'enregistrer vos cellules via Storyboard. Cela rend les choses très déroutantes.

0
kakubei