打开ARC后出现UITableViewCell.contentView错误

时间:2012-03-03 04:55:12

标签: objective-c ios

我对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;
}

1 个答案:

答案 0 :(得分:0)

这不是如何实施cellForRowAtIndexPath。你为什么不打电话给dequeueReusableCellWithIdentifier:

同样(可能更重要)您无法通过调用alloc init来创建表格视图单元格。指定的初始值设定项为initWithStyle:reuseIdentifier:;我相信你必须称之为。

最后,我对这个TextFieldCellController非常怀疑。如果它是一个UITableViewCell子类,那么像这样初始化它不会导致它有任何带有1或2标记的子视图。如果它不是UITableViewCell子类那么它到底是什么?我希望你没有使用UIViewController从笔尖加载一个单元格;那将是非常错误的。