wake-up-neo.net

Der Wert des Typs 'UITableViewCell' konnte nicht in '(AppName). (CustomCellName)' umgewandelt werden.

Ich versuche gerade, eine benutzerdefinierte Tabellenzellenzelle mit xCode 6.3 Swift 1.2 zu erstellen. Aus irgendeinem Grund in der cellforRowAtIndexPath-Methode kann ich meine Zellenvariable einfach nicht einrichten. Der Code wird kompiliert, aber wenn diese Codezeile zutrifft:

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

Ich erhalte diesen Fehler: Der Wert des Typs 'UITableViewCell' (0x1112f5a18) konnte nicht in 'CampusExchange.MessageCell' (0x10e8318f0) umgewandelt werden.

Hier ist meine vollständige Methode: (Ich verwende Parse, wenn Sie sich fragen, wie ich die Nachricht einstelle.)

    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
}

vielen Dank für Ihre Hilfe. Ich kann das einfach nicht zum Laufen bringen.

33
obo20

In diesem Szenario können Sie einige Dinge überprüfen:

  1. Prüfen Sie, ob Ihre Tabelle mit Ihrer Klasse verknüpft ist, normalerweise durch @IBOutlet weak var tableView: UITableView!

  2. Registrieren Sie die Zelle der benutzerdefinierten Tabellensicht: self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") Beachten Sie, dass Sie "UITableViewCell" und den Bezeichner "cell" verwenden, auch wenn Ihre benutzerdefinierte Zelle andere Klassen und IDs hat.

  3. Entpacken Sie Ihre Zelle in cellForRowAtIndexPath: let cell: MessageCell = self.tableView.dequeueReusableCellWithIdentifier("messageCell") as! MessageCellJetzt verwenden Sie die richtige Zellkennung.

63
Rodrigo Pedroso

Registrieren Sie Ihre CustomCell in der viewDidLoad()-Methode:

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

In viewDidLoad ()

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

X Code 9.4
Im Gegensatz zu einer der beliebtesten Antworten hier hat diese Lösung meinen Albtraum mit benutzerdefinierten Tabellenzellen behoben. Wenn Sie ein Storyboard verwenden und alles korrekt angeschlossen ist, müssen Sie die benutzerdefinierte tableView-Zelle in viewDidLoad nicht registrieren.

Aus viewDidLoad entfernen:
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")

Ich hatte dasselbe Problem, ich habe eine benutzerdefinierte Klasse für die Zelle festgelegt, aber das Modul eingestellt enter image description here

nach der Auswahl dieses Moduls hat es funktioniert

enter image description here

5
Deepti Raghav

Ich habe die gleiche Fehlermeldung erhalten. Aber für mich bestand das Problem darin, dass ich im Interface Builder nicht die Klasse meiner benutzerdefinierten Zellen festgelegt habe.

5
Milander

In meinem Fall habe ich die UITableViewCell-Klasse nicht geändert. Anfangs war es die DetailsTableViewCell-Klasse, aber ich habe eine neue Klasse mit dem Namen TableViewCellClass entfernt und hinzugefügt. Aber ich vergesse, den Namen der Zellklasse hier zu ändern.

Prüfen Sie also noch einmal den Namen der TableViewCell-Klasse, siehe Abbildung unten

 enter image description here

2
iOS

Behalten Sie den Namen der benutzerdefinierten Zellklasse und die Zell-ID bei:

   self.tableView.register(CustomCell.self, forCellReuseIdentifier: "CustomCell")
1
Arafin Russell

Als Erstes schlage ich vor, dass Sie Ihre Zellklasse mit CocoaClass neu erstellen. Ich hatte einen ähnlichen Fehler - ich habe eine CollectionViewCell erstellt, und als ich meinen Fehler erkannte, beschloss ich, die übergeordnete Klasse einfach umzubenennen. Der Compiler hat jedoch keinen Fehler bemerkt. Ich hatte diesen Fehler während des Builds.

0
Daniel Chepenko

Swift 3-Syntax:

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

Erstellen Sie Ihre Klasse mit cocoaClass neu und wählen Sie UItableViewCell aus.

Ich hatte das gleiche Problem, das für mich funktioniert hat.

0
daniel pham

Ich hatte den gleichen Fehler. Wie obo2O in seinem Kommentar feststellt, hat seine Lösung für mich funktioniert:

  1. Wechseln Sie zum Interface Builder
  2. Klicken Sie auf das entsprechende Storyboard
  3. Klicken Sie in der Tabellenansicht auf die entsprechende Zelle
  4. Klicken Sie im Dienstprogrammbereich (rechts) auf das Symbol "Identify Inspector anzeigen"
  5. Legen Sie im Feld "Benutzerdefinierte Klasse" -> "Klasse" die Klasse auf einen anderen Wert fest und führen Sie die Anwendung aus. Die Anwendung stürzt ab, da classX nicht in classY umgewandelt werden kann
  6. Legen Sie im Feld "Benutzerdefinierte Klasse" -> "Klasse" die Klasse auf die richtige Klasse fest und führen Sie sie erneut aus.
0
Jacksonsox