2015-09-12 2 views
0

Я использую среду QuickBlox для создания чат-приложения. Ниже приведен код cellForRowAtIndexPath.Объектив C - cellForRowAtIndexPath Cell Never Nil?

Есть некоторые вещи, которые я хотел бы делать с каждой ячейкой только один раз (например, загружать изображения), так как я понял, я должен добавить блок if (! Cell), чтобы сделать это.

Однако этот блок никогда не срабатывает, даже когда табло просматривается в первый раз. Почему это так?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    QBChatMessage *message = [[ChatService shared] messagsForDialogId:self.dialog.ID][indexPath.row]; 
    ChatMessageTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ChatMessageCellIdentifier]; 

    if (!cell) { 
    // some things I only want to do once here, such as download images. but it never fires 
    } 

    [cell configureCellWithMessage:message]; 
    return cell; 
} 
+1

'dequeueReusableCellWithIdentifier' не будет возвращать' nil', если вы использовали 'registerClass: forCellReuseIdentifier:'. – rmaddy

+0

Да. Вы можете найти это в документации, которую знаете ... – sloik

+0

@rmaddy Я использовал registerClass ... есть ли другой способ, который позволил бы мне делать то, что я хочу? –

ответ

1

Вызов dequeueReusableCellWithIdentifier: вернется nil, только если вы не зарегистрировали ячейку с помощью registerClass:forCellReuseIdentifier:.

Снимайте использование registerClass:forCellReuseIdentifier: затем dequeueReusableCellWithIdentifier: может вернуть nil и вы можете создать новую ячейку и инициализировать его должным образом в вашем if заявления:

if (!cell) { 
    cell = [[ChatMessageTableViewCell alloc] init...]; // use proper init method 
    // setup cell as needed for first time 
} 
+0

спасибо, я всегда делал это, регистрируя класс. это просто и помогло мне –

0

Вместо этого вы могли бы выполнить одно действие времени внутри инициализатора из ChatMessageTableViewCell класс. Таким образом, вы можете сохранить поведение, с которым вы привыкли, при регистрации.