Ios 使用InstanceWithOwner:方法时未调用awakeFromNib

Ios 使用InstanceWithOwner:方法时未调用awakeFromNib,ios,uitableview,nib,awakefromnib,uinib,Ios,Uitableview,Nib,Awakefromnib,Uinib,我有一个小问题,我需要了解东西是如何工作的。我在SO中搜索过,但没有找到任何有效的解决方案 我的情况如下 我有一个UITableViewController,它通过UINib方法实例化所有者:加载单元格(在其表内) - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { CustomTableViewCell *ce

我有一个小问题,我需要了解东西是如何工作的。我在SO中搜索过,但没有找到任何有效的解决方案

我的情况如下

我有一个
UITableViewController
,它通过
UINib
方法
实例化所有者:
加载单元格(在其表内)

- (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

你能解释一下我做错了什么吗


先谢谢你

实际上,您需要在显示“此处的其他内容”的代码中进行自定义。由于回收单元,因此需要确保在每次使用时正确配置单元

编辑:我做了一个测试项目,并验证了awakeFromNib实际上是发送给类的。这让我相信根本问题在于,在带有单元格的nib中,您没有将单元格的类设置为CustomClass名称。这是唯一可能的解释

编辑2:所以重申一下:

  • 在CustomTableViewCell.xib中,对象的类设置为“CustomTableViewCell”

  • 在initWithCoder中的CustomTableViewCell.m中添加一些日志消息:如果有,也可以在awakeFromNib中添加(确保拼写!!!)

  • 在此处实例化“cell=[topLevelItems objectAtIndex:0];”时,在NSLog之前添加日志(@“将实例化”),然后添加日志:

    NSLog(@"Instantiate a %@ cell", NSStringFromClass([cell class]);
    

在这里必须要有所付出。您的部署目标是什么?在我的测试中,我使用了5.1

我只是遇到了同样的问题,即在使用
实例化所有者时没有调用
awakeFromNib
。但是,我改回使用
[[NSBundle mainBundle]loadNibNamed:name-owner:self-options:nil]
,它没有解决这个问题

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

所以,在咬牙切齿和拔头发之后,结果证明这是一个基本的错误

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

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


David,谢谢你的回复。但是为什么不调用
awakeFromNib
+谢谢你的建议。大卫,谢谢你的编辑。我检查了课程,它在正确的地方。很奇怪;(我会做一些测试,我会尽快回来发表评论。非常感谢您的支持。