Я использую custom
UITableViewCell
в моих UITableView
. Проблема в том, что 'dequeueReusableCellWithIdentifier
' returns nil
, когда он должен вернуть уже созданную ячейку, по крайней мере, я так думаю.Почему dequeueReusableCellWithIdentifier возвращает nil после выделения ячеек?
Вот код:
......
self.chattableView=[[UITableView alloc]initWithFrame:CGRectMake(0, 0, width, height) style:UITableViewStylePlain];
self.chattableView.separatorStyle=UITableViewCellSeparatorStyleNone;
self.chattableView.dataSource=self;
self.chattableView.delegate=self;
[self.view addSubview:self.chattableView];
......
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
chatCellData* tempcelldata = self.cellDataArray[indexPath.row];
NSString* reusestr =[NSString stringWithFormat:@"%d",tempcelldata.chattype];
ChatTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reusestr];
if(cell)//set cell data and change some label frame
{
[cell SetCellWithReuseIdentifier:reusestr andCellData:tempcelldata];
NSLog(@"dequeueReusableCellWithIdentifier : %@ ",reusestr);
}
else//alloc cell
{
cell = [[ChatTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reusestr withCellData:tempcelldata];
NSLog(@"alloc with Identifier:%@ ",reusestr);
}
return cell;
}
Когда я прокручивать tableview
я получаю следующую информацию печати:
......
Demo[40891:4326063] dequeueReusableCellWithIdentifier : 4
Demo[40891:4326063] dequeueReusableCellWithIdentifier : 4
Demo[40891:4326063] alloc with Identifier:1
Demo[40891:4326063] alloc with Identifier:5
Demo[40891:4326063] alloc with Identifier:4
Demo[40891:4326063] alloc with Identifier:4
Demo[40891:4326063] alloc with Identifier:4
Demo[40891:4326063] alloc with Identifier:2
Demo[40891:4326063] alloc with Identifier:1
Demo[40891:4326063] alloc with Identifier:5
Demo[40891:4326063] alloc with Identifier:2
Demo[40891:4326063] alloc with Identifier:32
Demo[40891:4326063] alloc with Identifier:1
Demo[40891:4326063] alloc with Identifier:1
Demo[40891:4326063] alloc with Identifier:32
Demo[40891:4326063] alloc with Identifier:4
Demo[40891:4326063] dequeueReusableCellWithIdentifier : 4
Demo[40891:4326063] alloc with Identifier:32
Demo[40891:4326063] alloc with Identifier:4
Demo[40891:4326063] alloc with Identifier:4
Demo[40891:4326063] alloc with Identifier:4
Demo[40891:4326063] dequeueReusableCellWithIdentifier : 32
Demo[40891:4326063] alloc with Identifier:1
Demo[40891:4326063] alloc with Identifier:32
Demo[40891:4326063] dequeueReusableCellWithIdentifier : 1
Demo[40891:4326063] alloc with Identifier:1
Demo[40891:4326063] alloc with Identifier:32
Demo[40891:4326063] alloc with Identifier:1
Demo[40891:4326063] alloc with Identifier:4
Demo[40891:4326063] alloc with Identifier:32
Demo[40891:4326063] alloc with Identifier:4
Demo[40891:4326063] alloc with Identifier:32
Demo[40891:4326063] alloc with Identifier:4
Demo[40891:4326063] alloc with Identifier:32
Demo[40891:4326063] alloc with Identifier:4
Demo[40891:4326063] alloc with Identifier:32
Demo[40891:4326063] alloc with Identifier:4
Demo[40891:4326063] alloc with Identifier:32
Demo[40891:4326063] alloc with Identifier:4
Demo[40891:4326063] alloc with Identifier:32
Demo[40891:4326063] alloc with Identifier:4
Demo[40891:4326063] alloc with Identifier:32
Demo[40891:4326063] alloc with Identifier:4
Похоже, что «dequeueReusableCellWithIdentifier
» returns nil
иногда даже если клетка с тот же Идентификатор уже создан. Почему это?
после того, как удалить
[cell SetCellWithReuseIdentifier:reusestr andCellData:tempcelldata];
Это, кажется, лучше, вот информация для печати:
......
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 1
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 1
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 1
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 1
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 1
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 1
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 1
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 1
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 1
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 2
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 5
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 1
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 1
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 5
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 2
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 1
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 5
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 2
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 1
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 1
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 4
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 32
Demo[40999:4371081] dequeueReusableCellWithIdentifier : 2
......
, конечно, показали данные не является правильным теперь после удаления функции. Похоже, что он не будет повторно использовать ячейку с другим фреймом, даже если у них есть один и тот же идентификатор повторного использования.
ylongwu: Не очень уверен, пожалуйста, вы можете удалить [сотовый SetCellWithReuseIdentifier: reusestr andCellData: tempcelldata]; в ячейке для строки по пути индекса и снова проверить результат :) Это утверждение не имеет большого смысла :) –