2017-12-14 3 views
0
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cellReuseIdentifier") as! CustomTableViewCell 

    let text = data[indexPath.row] 

    cell.label.text = text 

    return cell 
} 

oben auf ist der Code, den ich sah, um zu folgen.ios Swift macht Tabellen-Liste erhalten immer Fehler über Nill

mein Code wie unten

enter image description here

Ich weiß nicht, warum es nil Wert immer auf tableView.dequeueReusableCell (withIdentifier: "locCell")

mein Storyboard ist als unten

enter image description here

Ich habe die Kennung wie folgt hinzugefügt (y ou kann es auf unteren rechten Abschnitt von pic

enter image description here

Antwort

1

Sie benötigen finden Sie in der Zelle für die Wiederverwendung zu registrieren.

Oder geben Sie Ihre Wiederverwendungs-ID in das Storyboard ein, indem Sie Ihre Zelle auswählen und dann die Wiederverwendungs-ID in den Eigenschaften auf der rechten Seite eingeben.

+0

Es hat nichts mit der Registrierung der Zelle zu tun, da die Zelle bereits in der Tabellenansicht ist (wie im zweiten Screenshot gezeigt) (keine getrennte .xib-Datei), ist es nicht notwendig, eine solche Implementierung durchzuführen; Es geht darum, die Zelle zu sein * optional *, du könntest [meine Antwort] überprüfen (https://stackoverflow.com/a/47808855/5501940). –

+0

Eine Zelle muss eine Wiederbenutzungs-ID haben, die aus der Warteschlange entfernt wird. Das Hinzufügen einer Zelle führt dies nicht automatisch durch – Scriptable

+0

Kein Zweifel! Angenommen, das OP hat es von IB Builder ausgeführt, aber das ist nicht der direkte Grund für die Anzeige der Warnung. –

1

Einfach, weil tableView.dequeueReusableCell(withIdentifier: "cell") standardmäßig nil ist.

Es ist der gleiche Fall für jeden optional wenn man versucht, es zu drucken, zB:

let optionalString: String? = "" 
print(optionalString) 

führt zu bekommen:

enter image description here

Also, indem eine Konstante zu erklären, wie :

let cell = tableView.dequeueReusableCell(withIdentifier: "cell") 

seit dequeueReusableCell(withIdentifier:) gibt eine optionale UITableViewCell Instanz zurück, der Typ cell wäre UITableViewCell? (optional UITableViewCell), deshalb sehen Sie diesen Fehler.

Wie man es loswerden?

Unter der Annahme, dass Sie die Zelle rechts Kennung für Ihre Zelle gesetzt haben:

enter image description here

Nun, Ihre benutzerdefinierte Zelle mit im Fall könnten Sie es als Stimmen:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as? MyCustomCell else { 
     // something goes wrong 
     return UITableViewCell() 
    } 

    print(cell) // it would be fine for now 

    // ... 

    return cell 
} 

Und wenn Sie keine benutzerdefinierte Zelle haben, müssen Sie nur das as? MyCustomCell Down Casting entfernen.

+0

hallo :) aber es geht nur um etwas geht schief Abschnitt .... obwohl ich die Kennung locCell hinzugefügt ... –

+0

Was ist der Fehler, der Sie gegenüberstehen? –

+0

und kann Text nicht wie folgt setzen. –

0

ersetzen

let cell = tableView.dequeueReusableCell(withIdentifier: "locCell") 

Mit diesem Code:

let cell = tableView.dequeueReusableCell(withIdentifier: "locCell", for: indexPath) 
0
func tableView (_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cellReuseIdentifier", for: indexPath) as! CustomTableViewCell 
     cell.label.text = data[indexPath.row].name 
     return cell 
    } 

HINWEIS: In Ihrem Storyboard gesetzt Tableview Delegate, Datasource und stellen Zellen-ID cellReuseIdentifier.

+0

Ich erhalte die Fehlermeldung *** Beenden App aufgrund der nicht abgefangenen Ausnahme 'NSInternalInconsistencyException', Grund: 'nicht in der Lage, eine Zelle mit Kennung locCell aus der Warteschlange - muss eine Feder oder eine Klasse für den Bezeichner oder verbinden eine Prototypzelle in einem Storyboard ' warum ist das? Ich habe locCell-Kennung auf dem Haupt-Storyboard hinzugefügt ... –

+0

Ich habe ein Bild hinzugefügt, das zeigt, wie ich den Bezeichner auf dem Storyboard hinzugefügt habe ... kannst du nachsehen, ob es richtig ist? . –

+0

Haben Sie Ihren UITableViewCell-Klassennamen und die Zellen-ID festgelegt? –