web-dev-qa-db-fra.com

Impossible de convertir la valeur du type 'UITableViewCell' en '(NomApp). (CustomCellName)'

J'essaie actuellement de créer une cellule d'affichage de tableau personnalisé à l'aide de xCode 6.3 Swift 1.2. Pour une raison quelconque dans la méthode cellforRowAtIndexPath, je n'arrive pas à configurer ma variable de cellule. Le code sera compilé, mais quand cette ligne de code apparaîtra:

    var cell:MessageCell = tableView.dequeueReusableCellWithIdentifier("messageCell") as! MessageCell

J'ai cette erreur: Impossible de convertir la valeur du type 'UITableViewCell' (0x1112f5a18) en 'CampusExchange.MessageCell' (0x10e8318f0).

Voici ma méthode complète: (J'utilise Parse si vous vous demandez comment je configure le message)

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell:MessageCell = tableView.dequeueReusableCellWithIdentifier("messageCell") as! MessageCell

    let message = messagesArray[indexPath.row]["Message"] as? String
    cell.messageOutlet.text = message
    return cell
}

merci pour toute aide que vous pourriez avoir. Je n'arrive pas à faire en sorte que cela fonctionne.

33
obo20

Il y a quelques choses que vous pouvez vérifier dans ce scénario:

  1. Vérifiez si votre table est liée à votre classe, généralement par @IBOutlet weak var tableView: UITableView!

  2. Enregistrez la cellule de la vue de table personnalisée: self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") Notez que vous utilisez "UITableViewCell" et l'identificateur "cell" même si votre cellule personnalisée a une classe et un identifiant différents.

  3. Mettez votre cellule en file d'attente dans cellForRowAtIndexPath: let cell: MessageCell = self.tableView.dequeueReusableCellWithIdentifier("messageCell") as! MessageCellMaintenant, vous utilisez l'identificateur de cellule correct.

63
Rodrigo Pedroso

Enregistrez votre méthode CustomCell dans viewDidLoad():

self.tableView.register(CustomCell.self, forCellReuseIdentifier: "Cell")
33
Madhurya Gandi

Dans viewDidLoad ()

// register custom table view cell from nib
self.tableView.registerNib(UINib(nibName: "MessageCell", bundle: nil), forCellReuseIdentifier: "messageCell")
9
Long Pham

J'ai eu le même problème, j'ai défini une classe personnalisée pour la cellule mais j'ai oublié de définir le module  enter image description here

après avoir sélectionné ce module, cela a fonctionné

 enter image description here

5
Deepti Raghav

J'ai eu le même message d'erreur. Mais pour moi le problème était que je n'avais pas défini la classe de ma cellule personnalisée dans le constructeur d'interface.

5
Milander

Dans mon cas, je n'ai pas changé la classe UITableViewCell. Au départ, c’est la classe DetailsTableViewCell mais j’ai supprimé et ajouté une nouvelle classe appelée TableViewCellClass. Mais j'oublie de changer le nom de la classe de cellule ici.

Donc, encore une fois, vérifiez et modifiez le nom de la classe TableViewCell ici voir la capture d'écran ci-dessous

 enter image description here

2
iOS

Tout d'abord, je vous suggère de recréer votre classe de cellules en utilisant CocoaClass. J'ai eu une erreur assez similaire - j'ai créé un CollectionViewCell, et quand j'ai reconnu mon erreur, j'ai décidé de renommer simplement la classe parent. Cependant, le compilateur n'a pas remarqué d'erreur, j'ai eu cette erreur pendant la construction.

0
Daniel Chepenko

Syntaxe de Swift 3:

self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
0
bj97301

Recréez votre classe en utilisant cocoaClass et sélectionnez UItableViewCell

J'ai eu le même problème cela a fonctionné pour moi.

0
daniel pham

J'ai eu la même erreur. Comme obo2O le dit dans son commentaire, sa solution a fonctionné pour moi:

  1. Aller au constructeur d'interface
  2. Cliquez sur le storyboard correspondant
  3. Cliquez sur la cellule correspondante dans la table.
  4. Dans le panneau Utilitaires (à droite), cliquez sur l'icône "Afficher l'inspecteur d'identification".
  5. Dans la section "Classe personnalisée" -> "Classe", définissez la classe sur quoi que ce soit d'autre et exécutez l'application. L'application se bloque, car classX ne peut pas convertir en classY
  6. Dans la section "Classe personnalisée" -> "Classe", définissez la classe sur la classe correcte, puis réexécutez-la.
0
Jacksonsox