使用instantiateWithOwner:方法时未调用awakeFromNib

时间:2012-09-20 11:37:11

标签: ios uitableview nib awakefromnib uinib

我有一点问题,我需要了解其中的工作原理。我在SO内搜索过,但没有找到任何有效的解决方案。

我的情况如下。

我有UITableViewController通过UINib方法instantiateWithOwner:加载单元格(在其表格中使用)。

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellClassName];
    if (!cell) {

        NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil];
        cell = [topLevelItems objectAtIndex:0];
    }

    // other stuff here...

    return cell;
}

正确显示单元格。现在,我需要根据不同的标准自定义每个单元格,我认为正确的位置是awakeFromNib方法。例如,在CustomTableViewCell。m范围内,我重写awakeFromNib,如下所示:

- (void)awakeFromNib
{
    // my internal stuff here
}

awakeFromNib未被调用。

你能解释一下我做错了吗?

提前谢谢你。

1 个答案:

答案 0 :(得分:1)

我在使用awakeFromNib时没有调用instantiateWithOwner时遇到同样的问题。但是,我改回使用[[NSBundle mainBundle] loadNibNamed:name owner:self options:nil]并且没有解决问题。

然后,将测试选择器添加到我的自定义视图实现中,当然,应用程序在无法识别的选择器上崩溃。

所以在咬了一下牙齿和头发之后,结果证明这是一个非常基本的错误。

在与自定义视图关联的Xib中,我忘记在Interface Builder中的身份检查器中输入名称。因此,运行时认为我的类是UIView而不是MyCustomView的实例。所以awakeFromNib断点从未触发过。

底线:如果您在使用带有关联Xib的自定义视图类时遇到此问题,请检查您是否正确设置了类名:

enter image description here