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.