【问题标题】:Why does Custom UITableViewCell *sometimes* cause an NSInvalidArgumentException?为什么自定义 UITableViewCell *sometimes* 会导致 NSInvalidArgumentException?
【发布时间】:2010-06-11 03:19:53
【问题描述】:

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

[UITableViewCell 名称标签]: 无法识别的选择器发送到实例 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 数据源必须从 tableView:cellForRowAtIndexPath 返回一个单元格:

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

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    topLevelObjects 中的所有对象都是OrderItemCell 类型的吗?您有可能将不同的对象分配给 cell,将其类型转换为不同的对象,因此出现无法识别的选择器错误。

    【讨论】:

    • 对不起,没有。我没有抛出前面提到的异常,而是得到另一个:由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UITableView 数据源必须从 tableView:cellForRowAtIndexPath: 返回一个单元格:假设它离开“for”循环而没有找到任何单元格那种特殊的。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-01
        • 2019-04-12
        • 2023-03-27
        相关资源
        最近更新 更多