dequeueReusableCellWithIdentifier: идентификатор, не собирающий ячейку loadNibNamed - PullRequest
1 голос
/ 16 декабря 2010

У меня есть простая ячейка - разработанная в 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 голосов
/ 10 мая 2011

Способ создания ячейки табличного представления не может гарантировать, что ячейка будет помещена в очередь многократного использования в табличном представлении. Единственный способ сделать это - использовать

initWithStyle:reuseIdentifier:

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

Мой еще один вопрос

0 голосов
/ 16 декабря 2010

Вы уверены, что ячейки были установлены с идентификатором ячейки?UITableView не будет кешировать тех, у кого нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...