Variablen in eigener TableViewCell Klasse immer nil

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Variablen in eigener TableViewCell Klasse immer nil

    Schönen guten Nachmittag,
    ich habe ein Problem mit einer eigenen Klasse.

    Ich möchte in einer TableView eigene Zellen designen und anzeigen.
    Nachdem ich die Zelle fertig designt habe, habe ich eine neue Klasse angelegt, die von UITableViewCell stammt.
    In dieser Klasse habe ich nun die IBOutlets verlinkt.

    Wenn ich mir jetzt ein neues Objekt dieser Klasse erstelle und den Outlets einen Wert zuweise, bekomme ich immer folgende Meldung:
    fatal error: unexpectedly found nil while unwrapping an Optional value

    Ich verstehe aber nicht, warum das so ist.
    So sieht die Klasse aus:

    Quellcode

    1. import UIKit
    2. class CustomTableViewCell: UITableViewCell {
    3. @IBOutlet weak var cellLabel1: UILabel!
    4. @IBOutlet weak var cellTextField1: UITextField!
    5. @IBOutlet weak var cellTextField2: UITextField!
    6. override func awakeFromNib() {
    7. super.awakeFromNib()
    8. // Initialization code
    9. }
    10. override func setSelected(selected: Bool, animated: Bool) {
    11. super.setSelected(selected, animated: animated)
    12. // Configure the view for the selected state
    13. }
    14. func setCellProperties(cellLabel1: String, cellTextField1: String, cellTextField2: String) {
    15. self.cellLabel1.text = cellLabel
    16. self.cellTextField1.text = cellTextField1
    17. self.cellTextField2.text = cellTextField2
    18. }
    19. }
    Alles anzeigen
    Links neben den Outlets befinden sich die Kreise, die mit einem schwarzen Punkt gefüllt sind (die Verlinkung ist also vorhanden).

    Wenn ich die Kreise anklicke, dann werden mir die passenden Elemente auf dem View auch gehighlightet.

    Wenn ich nun ein neues CustomTableViewCell-Objekt erstelle und die Variablen mittels der "setCellProperties"-Methode befülle und mit die Variablen direkt danach mit Print ausgeben lasse, bekomme ich oben genannte Fehlermeldung.

    Quellcode

    1. let cell = CustomTableViewCell()
    2. cell.setCellProperties("Test1", cellTextField1: "Test2", cellTextField2: "Test3")
    3. print(cell.cellLabel1.text)



    Was mache ich falsch?
    MacBook Air Late 2008
    OS X Mountain Lion 10.8.4
  • deine ParameterNamen sind äußerst schlecht gewählt, du übergibst ja kein Label sondern Text
    wenn es in dem Style sein soll, dann wäre cellLabelText besser

    zu deinem Problem
    ich glaube deine UIElemente sind als optinals markiert (durch die IBOutlets) du musst das glaub ich mit dem ? kenntlich machen

    cellLabel1?.text

    und das self bin ich der Meinung kannst du bei Swift da auch weglassen
    Ich weiß nicht immer wovon ich rede aber ich weiß das ich Recht habe. :saint:
  • nussratte schrieb:

    deine ParameterNamen sind äußerst schlecht gewählt, du übergibst ja kein Label sondern Text
    wenn es in dem Style sein soll, dann wäre cellLabelText besser

    zu deinem Problem
    ich glaube deine UIElemente sind als optinals markiert (durch die IBOutlets) du musst das glaub ich mit dem ? kenntlich machen

    cellLabel1?.text

    und das self bin ich der Meinung kannst du bei Swift da auch weglassen
    In dem konkreten fall fidne ich self dort aber gut, da die Parameter genau wie die properties heißen.
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • Die Outlets werden nur gesetzt, wenn du die Zelle aus einer .xib oder einem Storyboard lädst und nicht wenn du einfach nur einen Konstruktor verwendest.
    Du kannst die nib auch bei der TableView registrieren registerNib(, forReuseIdentifier:) oder so ähnlich und dann in der cellForRowAtIndexPath einfach dequeCellForIdentifier aufrufen. Dann sind deine Outlets auch korrekt gesetzt. Alternativ musst du einfach die init Methode überschreiben und deine Outlets dort selbst setzen.

    @'nusssatte' Das ? ist nicht nötig das es sich um implicitly unwrapped Optionals handelt.
    Das Herz besitzt Gründe, die die Vernunft nicht kennt.