我对IOS开发相当新,所以如果这是一个无知的问题我会道歉。
在重构我的代码以使用ARC之后,我开始收到SIGABRT错误,当执行以下行时会抛出该错误:
UILabel *label = (UILabel *)[cell.contentView viewWithTag:labelTag];
控制台输出包括以下内容:
'NSInvalidArgumentException',原因:' - [__ NSArrayM contentView]:无法识别的选择器发送到实例0x1acba0'
该行的上下文是:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
const NSInteger labelTag = 1;
const NSInteger textFieldTag = 2;
UITableViewCell *cell = nil;
if([indexPath section] == 0) {
if([indexPath row] == 0) {
//this is the username row. Set the label accordingly.
cell = [[TextFieldCellController alloc] init];
UILabel *label = (UILabel *)[cell.contentView viewWithTag:labelTag];
label.text = @"Username";
}
else if([indexPath row] == 1) {
//this is the row that contains the password input. Set the label and
//change the textfield to use a password input style.
cell = [[TextFieldCellController alloc] init];
UILabel *label = (UILabel *)[cell.contentView viewWithTag:labelTag];
label.text = @"Password";
UITextField *text = (UITextField *)[cell.contentView viewWithTag:textFieldTag];
text.secureTextEntry = YES;
}
}
return cell;
}
我正在控制台窗口中玩游戏,当我在该行上放置一个断点后输入“print cell.contentView”时,我得到了“没有名为contentView的成员。”。我不确定这是否有用。
提前感谢您的帮助。
编辑:
抱歉,TextFieldCellController是UITableViewCell的子类,它加载包含标签和文本字段的笔尖。
@implementation TextFieldCellController
@synthesize label;
@synthesize textField;
- (id)init {
self = (TextFieldCellController *)[[NSBundle mainBundle] loadNibNamed:@"TextFieldCell" owner:self options:nil];
return self;
}
答案 0 :(得分:0)
这不是如何实施cellForRowAtIndexPath
。你为什么不打电话给dequeueReusableCellWithIdentifier:
?
同样(可能更重要)您无法通过调用alloc init
来创建表格视图单元格。指定的初始值设定项为initWithStyle:reuseIdentifier:
;我相信你必须称之为。
最后,我对这个TextFieldCellController非常怀疑。如果它是一个UITableViewCell子类,那么像这样初始化它不会导致它有任何带有1或2标记的子视图。如果它不是UITableViewCell子类那么它到底是什么?我希望你没有使用UIViewController从笔尖加载一个单元格;那将是非常错误的。