Ios 使用InstanceWithOwner:方法时未调用awakeFromNib
我有一个小问题,我需要了解东西是如何工作的。我在SO中搜索过,但没有找到任何有效的解决方案 我的情况如下 我有一个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
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
+谢谢你的建议。大卫,谢谢你的编辑。我检查了课程,它在正确的地方。很奇怪;(我会做一些测试,我会尽快回来发表评论。非常感谢您的支持。