我正在使用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;
}
答案 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
类的初始化内执行一次性操作。这样你就可以保持你习惯的行为与注册。