我知道你一看到标题就一定要思考......这很常见但是相信我,过去两天我一直在用这个来敲打我的脑袋。我已经尝试了stackoverflow和其他地方提到的每个解决方案,我可以在互联网上找到但没有任何作用。我甚至尝试重新开始我的项目(幸运的是,我在最初阶段陷入困境)但它仍然会抛出同样的异常。
以下是我的问题的说明。我已经创建了一个自定义单元格作为UITableViewCell的子类(很常见的呃)。现在我的视图控制器(在其中添加了UITableView)在viewdidload中为我的customcell注册了nib。
[self.tableView registerNib:[UINib nibWithNibName:@"VideoCustomCell"
bundle:[NSBundle mainBundle]]
forCellReuseIdentifier:@"CustomCellReuseID"];
并且在cellForRowAtIndexPath中我只是做一个dequeueReusableCellWithIdentifier。 到现在为止还挺好。我启动项目,一切正常。我可以在tableview中看到我的自定义单元格被加载。
当我将自定义单元格中的任何控件连接到IBOutlet时,问题就开始了。它抛出*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0xa4b4fe0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key vidName.'
现在我尝试了所有这些:
将XIB的文件所有者更改为我的自定义单元格类,更改为NSObject,更改为我的视图控制器,但没有运气。
更改插座的名称(如果可能存在命名冲突)但结果仍然相同。
将“主界面”更改为不同的视图控制器,并将其留空,但仍然没有。
我甚至尝试删除除了单元格中的一个标签之外的所有其他控件,当我连接时它仍会抛出异常。
仅供参考。我的项目是一个通用项目,我正在使用Xcode 5。
更新:cellForRowAtIndexPath代码
NSString *CellIdentifier = @"CustomCellReuseID";
VideoCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
cell.vidName.text = [NSString stringWithFormat:@"%d",indexPath.row];
return cell;
答案 0 :(得分:2)
您需要为Restoration ID和Class设置相同的值。
答案 1 :(得分:1)
从目前为止我收集到的信息来看,您似乎有以下设置:
我错过了什么吗?
所以这里有一些指导方针。为表视图单元格创建Xib文件时,将Interface Builder中的单元格实例设置为自定义单元格类 - 而不是文件的所有者。然后,将标签出口连接到接口构建器中的单元实例。像这样:
现在你的其余代码应该可以工作:
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView registerNib:[UINib nibWithNibName:@"VideoCustomCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"CustomCellReuseID"];
}
#pragma mark - UITableView Delegate/DataSource
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = @"CustomCellReuseID";
VideoCustomCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
cell.vidName.text = [NSString stringWithFormat:@"%d",indexPath.row];
return cell;
}
我在这里发布了一个示例项目,可以进一步提供帮助:https://github.com/perlmunger/BasicTableViewCustomCell