tableView: dequeueReusableCellWithIdentifier проблемы с «глобальной» константой

Спасите мои волосы, пожалуйста, или укажите на мою (очевидную) ошибку. Я пытаюсь использовать UITableViewStyleUITableViewCellStyleSubtitle в подклассе UITableViewController.

Я определяю статическую константу в реализации:

static NSString * const kAHCellIdentifier;

ВviewDidLoad Я регистрирую класс tableView:

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

Затем вtableView:cellForRowAtIndexPath Я инициализирую ячейку следующим образом:

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

При запуске приложения (устройства или сима) ячейки загружаются, но detailTextLabel не отображается, однако, если я инициализирую таким образом, он работает правильно *

Я предполагаю, что константа на самом деле не является статической, или что есть ошибка (8.0.2), или есть что-то, что я пропускаю полностью из-за недостатка сна или чего-то еще.

Также можно отметить, что если я не регистрирую класс, то возникает ошибка компилятора (ожидаемая), но нет ошибки, даже если идентификаторы ячеек различны (что, я полагаю, ожидается, поскольку я могу зарегистрировать разные классы для разных стилей ячеек).

Что мне не хватает?

редактировать

С помощью[tableView dequeueReusableCellWithIdentifier:kAHCellIdentifier forIndexPath:indexPath]; также не имеет никакого эффекта.

Короче вопрос

ПочемуdequeueReusableCellWithIdentifier вернуть ноль и, таким образом, инициировать ячейку, используя UITableViewCellStyle вcell == nil блок, если я использую статическую строку NSString вcellForRowAtIndexPath вызова метода, и нет, если я использую глобальную константу уровня класса, как определено выше.

дополнительный

Еще несколько испытаний дали несколько иные результаты. Если вы зарегистрируете класс для идентификатора повторного использования ячейки, а затем дадите ячейке другой идентификатор вcellForRowAtIndexPath тогда это работает. Если вы дадите ему то же имя, что и зарегистрированный класс, он не будет работать, как ожидалось.

Ответ

После некоторого тестирования и ответа @ MANIAK_dobrii, некоторая ясность.

Если вы хотите использовать более новый метод удаления ячеекdequeueReusableCellWithIdentifier:forIndexPath и нужно использоватьUITableViewCellStyle кроме по умолчанию, вам нужно подклассUITableViewCell и переопределить стиль таблицы вinitWithStyle вызов метода.

Если вы счастливы использовать старый метод, убедитесь, что вы не зарегистрировали класс для идентификатора повторного использования, иначе он не будет работать.

Ответы на вопрос(1)

Ваш ответ на вопрос