Objective C - cellForRowAtIndexPath Cell Never Nil?

时间:2015-09-12 19:47:07

标签: ios objective-c uitableview tableviewcell

我正在使用QuickBlox框架来构建聊天应用。下面是cellForRowAtIndexPath代码。

我想对每个单元格做一些事情(比如下载图片),所以据我所知,我应该添加if(!cell)块来做到这一点。

但是,即使第一次加载tableview,该块也不会实际触发。为什么会这样?

- (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;
}

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

相反,您可以在ChatMessageTableViewCell类的初始化内执行一次性操作。这样你就可以保持你习惯的行为与注册。