将文本设置为自定义表格单元格标签时发生崩溃

时间:2011-04-21 07:15:42

标签: iphone objective-c ios uitableview uilabel

当我想设置属于表格单元格的标签文本时,我的应用程序崩溃了。我的代码段如下:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

if (cell == nil) 
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:simpleTableIdentifier];
    [cell autorelease];

    CGRect splitMethodLabelRect = CGRectMake(160, 6, 50, 30); 
    UILabel *splitMethodLabel = [[UILabel alloc] initWithFrame:splitMethodLabelRect]; 
    splitMethodLabel.textAlignment = UITextAlignmentLeft; 
    splitMethodLabel.font = [UIFont systemFontOfSize:13]; 
    splitMethodLabel.tag = kSplitMethodTag;
    [cell.contentView addSubview: splitMethodLabel]; 
    [splitMethodLabel release];

}

UILabel *splitMethodName = (UILabel *)[cell.contentView viewWithTag:kSplitMethodTag]; 

//app crashes at this point
splitMethodName.text = @"Test"; 

问题似乎就在我设置文本时。 Stacktrace如下:

2011-04-21 15:11:10.820 BillSplitter[3021:707] -[UITableViewCellContentView setText:]: unrecognized selector sent to instance 0x18a680
2011-04-21 15:11:10.829 BillSplitter[3021:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCellContentView setText:]: unrecognized selector sent to instance 0x18a680'

非常感谢任何有关此事的建议!

2 个答案:

答案 0 :(得分:6)

您设置为 splitMethodLabel 标记值似乎可能导致问题。
Just change the tag value to something else and check if it crashes still.

答案 1 :(得分:2)

问题是:您是将自己的标签作为子视图添加到单元格中,但是没有给出引用splitMethodName的属性。标签位于单元格的视图层次结构中,但您没有访问它的引用。

您可以通过继承UITableViewCell并将标签添加为属性来解决此问题。然后使用您的自定义类。覆盖initWithStyle,将参数传递给super,然后创建标签,添加为子视图并分配给您的属性。