dequeueReusableCellWithIdentifier:标识符未获取loadNibNamed单元格

时间:2010-12-16 18:57:51

标签: iphone ipad ios uitableview

我有一个简单的单元格 - 在IB中设计 - 并且使用了reuseIdentifier集。下面的代码非常好用。但是 - NSLog()显示结果永远不会被缓存。

表视图控制器类:

 - (UITableViewCell *)tableView:(UITableView *)tableView 
          cellForRowAtIndexPath:(NSIndexPath *)indexPath 
 {
    switch/case for various cell types
    {
      Foo * item = [results objectAtIndex:indexPath.row];
      return [MyCell tableView:tableView populatedCellWith:item];
    }
 }

MyCell类..

+(UITableViewCell *)tableView:(UITableView *)tableView populatedCellWith:(Foo *)item  
{
   static NSString * identifier = @"XXX";

   MyCell *cell = (MyCell *) [tableView dequeueReusableCellWithIdentifier:identifier];
   if (cell == nil) {
       NSArray * items = [[NSBundle mainBundle] loadNibNamed:@"MyCell" 
                                 owner:self options:nil];
       cell = [items objectAtIndex:0];

       assert( cell && [cell.reuseIdentifier isEqualToString:identifier]);

       NSLog(@"That was a load - rather than a nice cache for %@", self.class);
   }
   fill out some stuff.
   return cell;

}

为什么这样 - 因为它使事情变得更有效率?

谢谢,

DW传递。

2 个答案:

答案 0 :(得分:0)

您确定已使用单元格标识符设置了单元格吗? UITableView不会缓存没有的人。

答案 1 :(得分:0)

创建表视图单元格的方式无法确保将单元格放入表视图中的可重用队列中。唯一的方法是使用

initWithStyle:reuseIdentifier:

Initializes a table cell with a style and a reuse identifier and returns it to the caller.

我的另一个question