2010-06-11 5 views
0

Я создал пользовательский UITableViewCell, но когда я из очереди клетки, иногда он бросает NSInvalidArgumentException:Почему пользовательский UITableViewCell * иногда * вызывает исключение NSInvalidArgumentException?

[UITableViewCell nameLabel]: unrecognized selector sent to instance 0x3b4e7f0

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UITableViewCell nameLabel]: unrecognized selector sent to instance 0x3b4e7f0'

Теперь мой обычай UITableViewCell имеет атрибут nameLabel, поэтому я запутался, почему он бросает эта ошибка. Ниже приведен код, я использую, чтобы из очереди клетки:

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSUInteger row = [indexPath row]; 
    CTMenuItemVO* key = [[[self retrieveCartItems] allKeys] objectAtIndex:row]; 
    NSNumber* quantity = [[self retrieveCartItems] objectForKey:key]; 
    static NSString* SectionsTableIdentifier = @"SectionsTableIdentifier2"; 
    OrderItemCell* cell = (OrderItemCell*)[tableView dequeueReusableCellWithIdentifier: 
          SectionsTableIdentifier]; 

    if (cell == nil) { 
     NSArray* topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"OrderItemCell"  
                    owner:nil 
                    options:nil]; 

     for(id currentObject in topLevelObjects) 
     { 
      if ([currentObject isKindOfClass:[UITableViewCell class]]) 
      { 
       cell = (OrderItemCell*) currentObject; 
       break; 
      }    
     } 
    } 

    cell.nameLabel.text = key.Name; 
    cell.qtyLabel.text = [quantity stringValue]; 

    return cell; 
} 

UPDATE

Изменение isKindOfClass:[UITableViewCell class] чек на OrderItemCell производит другая ошибка:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:

Я думаю, это происходит потому, что он оставляет цикл for без присвоения класса.

ответ

1

Оказалось, что было два разных копий с именем OrderItemCell. Не знаете, как doppelganger попал в мою структуру папок (хотя в моей рабочей области было только одно упоминание), но как только я удалил самозванец, он работал как шарм каждый раз.

1

Все объекты в категории topLevelObjects тип OrderItemCell? Существует вероятность того, что вы назначаете другой объект cell, приписывая его другому объекту и, следовательно, непризнанную ошибку выбора.

+0

Извините, нет. Вместо того, чтобы бросать ранее указанное исключение, я получаю другое: завершение приложения из-за неотображенного исключения «NSInternalInconsistencyException», причина: «UITableView dataSource должен возвращать ячейку из tableView: cellForRowAtIndexPath: при условии, что она покидает цикл« for », не найдя никаких ячеек этого конкретного вида. –

0

Измените [класс UITableViewCell] на [класс OrderItemCell].

Смежные вопросы