为什么Custom UITableViewCell *有时会导致NSInvalidArgumentException?

时间:2010-06-11 03:19:54

标签: iphone objective-c

我创建了一个自定义UITableViewCell,但是当我将单元格出列时,有时会它会抛出NSInvalidArgumentException

  

[UITableViewCell nameLabel]:   无法识别的选择器发送到实例   0x3b4e7f0

     

因未捕获而终止应用   例外   'NSInvalidArgumentException',原因:   '*** - [UITableViewCell nameLabel]:   无法识别的选择器发送到实例   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;
}

更新

isKindOfClass:[UITableViewCell class]支票更改为OrderItemCell会产生另一个错误:

  

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'UITableView dataSource必须从tableView返回一个单元格:cellForRowAtIndexPath:

我想这是因为它离开for循环而没有分配类。

3 个答案:

答案 0 :(得分:1)

topLevelObjects类型OrderItemCell中的所有对象都是?您可能正在为cell指定一个不同的对象,将其类型转换为另一个对象,从而导致无法识别的选择器错误。

答案 1 :(得分:1)

原来有两个不同的副本名为OrderItemCell。不确定doppelganger是如何进入我的文件夹结构的(即使我的工作区中只有一个被引用),但是一旦我移除了冒名顶替者,它每次都像魅力一样。

答案 2 :(得分:0)

将[UITableViewCell类]更改为[OrderItemCell类]。