我创建了一个自定义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
循环而没有分配类。
答案 0 :(得分:1)
topLevelObjects
类型OrderItemCell
中的所有对象都是?您可能正在为cell
指定一个不同的对象,将其类型转换为另一个对象,从而导致无法识别的选择器错误。
答案 1 :(得分:1)
原来有两个不同的副本名为OrderItemCell
。不确定doppelganger是如何进入我的文件夹结构的(即使我的工作区中只有一个被引用),但是一旦我移除了冒名顶替者,它每次都像魅力一样。
答案 2 :(得分:0)
将[UITableViewCell类]更改为[OrderItemCell类]。