tableView: dequeueReusableCellWithIdentifier gibt Probleme mit der "globalen" Konstante

Speichern Sie meine Haare, bitte oder weisen Sie auf meinen (offensichtlichen) Fehler hin. Ich versuche einen UITableViewStyle von @ zu verwendUITableViewCellStyleSubtitle in einem untergeordneten UITableViewController.

Ich definiere eine statische Konstante in der Implementierung:

static NSString * const kAHCellIdentifier;

ImviewDidLoad Ich registriere eine tableView-Klasse:

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:kAHCellIdentifier];

Dann intableView:cellForRowAtIndexPath Ich initialisiere die Zelle wie folgt:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kAHCellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kAHCellIdentifier];
}

Wenn die App (Gerät oder Sim) ausgeführt wird, werden die Zellen geladen, aber das DetailTextLabel wird nicht angezeigt. Wenn ich es jedoch so initialisiere, funktioniert es ordnungsgemäß. *

Meine Vermutung ist, dass die Konstante nicht statisch ist, oder dass es einen Fehler (8.0.2) gibt, oder dass mir etwas aufgrund von Schlafmangel oder was auch immer komplett fehlt.

Es kann auch angemerkt werden, dass, wenn ich die Klasse nicht registriere, ein Compilerfehler (erwartet) vorliegt, aber kein Fehler, obwohl die Zellbezeichner unterschiedlich sind (was ich denke, da ich verschiedene Klassen für verschiedene Zellstile registrieren könnte) .

Was vermisse ich

Bearbeite

Using[tableView dequeueReusableCellWithIdentifier:kAHCellIdentifier forIndexPath:indexPath]; hat auch keine Auswirkung.

Kürzere Frage

Warum macht dasdequeueReusableCellWithIdentifier return nil und initiiere so die Zelle mit dem UITableViewCellStyle imcell == nil block wenn ich einen statischen NSString im @ verwencellForRowAtIndexPath Methodenaufruf und nicht, wenn ich eine globale Konstante auf Klassenebene wie oben definiert verwende.

Zusätzlic

Einige weitere Tests haben zu unterschiedlichen Ergebnissen geführt. Wenn Sie eine Klasse für den Zellwiederverwendungsbezeichner registrieren und der Zelle dann einen anderen Bezeichner in @ gebcellForRowAtIndexPath dann klappt es. Wenn Sie ihm denselben Namen wie der registrierten Klasse geben, funktioniert er nicht wie erwartet.

Antworte

Nach einigem Testen und @ MANIAK_dobriis Antwort etwas Klarheit.

Wenn Sie die neuere Methode zum Entfernen von Zellen verwenden möchtendequeueReusableCellWithIdentifier:forIndexPath und müssen ein @ verwendUITableViewCellStyle anders als standardmäßig, müssen Sie @ UnterklasUITableViewCell und überschreiben Sie den Tabellenansichtsstil iminitWithStyle Methodenaufruf.

Wenn Sie mit der älteren Methode zufrieden sind, stellen Sie sicher, dass Sie keine Klasse für die Wiederverwendungskennung registrieren, da dies sonst nicht funktioniert.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage