Iphone UITableViewCell错误-此类不符合密钥的键值编码

Iphone UITableViewCell错误-此类不符合密钥的键值编码,iphone,objective-c,ios,cocoa-touch,cocoa-bindings,Iphone,Objective C,Ios,Cocoa Touch,Cocoa Bindings,当我试图通过UINib的instantiateWithOwner方法从xib文件加载自定义UITableViewCell时,出现以下错误。我已经尝试了我能在这里找到的所有其他解决方案,但运气不好。问题似乎是,当UINib打开xib文件时,它使用了超级类UITableViewCell,而不是我的自定义类ContentPackCell。我附上了Interface Builder的屏幕截图,显示了我将xib与我的类关联的位置以及与标识符关联的位置。肯定还有其他我错过的步骤 错误: ***由于未捕获的异

当我试图通过UINib的instantiateWithOwner方法从xib文件加载自定义UITableViewCell时,出现以下错误。我已经尝试了我能在这里找到的所有其他解决方案,但运气不好。问题似乎是,当UINib打开xib文件时,它使用了超级类UITableViewCell,而不是我的自定义类ContentPackCell。我附上了Interface Builder的屏幕截图,显示了我将xib与我的类关联的位置以及与标识符关联的位置。肯定还有其他我错过的步骤

错误:

***由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不符合密钥描述符标签的密钥值编码要求。”

代码(类似于苹果的AdvancedTableViewCells示例项目):


更新:


看起来您已经将nib中的UILabel与代码中不再存在的IBOutlet链接(descriptionLabel)


所以再次检查你的nib文件。我也曾多次出现此错误,这是我的解决方案。

检查nib中的所有元素,确保它们没有引用不再存在的内容。右键单击它们以查看所指向的内容。那里肯定会有东西的。

你试过这样做吗

static NSString *CellIdentifier = @"CellIdentifierName";
ContentPackCell *cell = (ContentPackCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:@"ContentPackCell" owner:self options:nil] ;
    cell=objCustomCell;
}
ContentPackCell *cell = (ContentPackCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
  [self.cellNib instantiateWithOwner:nil options:nil]; //Make owner nil
  cell = tmpCell;
  self.tmpCell = nil;
}

通常在执行
[[NSBundle mainBundle]loadNibNamed:@“ContentPackCell”所有者:nil选项:nil]时您会得到与现在一样的错误。因此,如果您遇到类似“此类不符合键值编码”的错误,则在这两种情况下,原因都是未为“文件所有者”设置类自定义单元格。

确保nib中的文件所有者设置为NSObject,同时确保没有连接到文件所有者的出口。

我遇到了完全相同的错误,我想知道当我右键单击左侧“对象”中的表单元格时,.h文件中的IBOutlets为什么没有显示,而只显示在文件所有者处。我发现,当我左键单击xib文件“视图”中的自定义表格单元格,然后在属性检查器中将其分配给“标识符”处的正确自定义(tableViewCell)类时,出口显示在“对象”处的表格单元格中。也许这有帮助

在我的例子中,问题是通过检查可编译源列表中是否存在.m来解决的

如果重命名、移动或添加自定义表格单元的新源(或Interface Builder所需的任何其他内容),则应将它们添加到Project->Targets->->->Build Phases->Compile sources


如果您有多个目标-检查所有目标。在我的项目中,有一个聚合类型为的活动目标(使用自定义IPA构建脚本),我认为这是问题的根源,因为新添加的*.m文件遗漏了应用程序类型目标的编译源列表

我不这么认为。问题在于指向现有IBOutlet的链接descriptionLabel。问题似乎是InstanceWithowner正在使用UITableViewCell而不是我的自定义类。由于UITableViewCell中没有用于descriptionLabel的IBOutlet,因此它会崩溃。如果我删除与自定义类的descriptionLabel的连接,它不会爆炸,但也没有必要的连接。不,请参阅我对SimonH答案的评论。我正在尝试以新的、更高效的方式重用UINib实例。所以,我不想使用loadNibNamed。我想使用InstanceWithOwner。是的,当我用这种方式尝试时,我得到了相同的错误,所以我想你已经了解了一些东西——谢谢。不幸的是,我进行了双重检查,并将该类设置为该单元格的文件所有者。我用一个屏幕截图更新了我的问题。我已经准备好放弃这个问题,回到使用NSBundle的loadNibNamed方法的老方法。我发现,如果我右键单击我的自定义单元格标签并拖动到相应的.h文件,创建一个出口,出口被分配给文件的所有者,这会导致上述崩溃。相反,如果我右键单击标签并拖动到表格单元格(左侧),然后选择适当的插座“一切正常”。@这看起来是一个更好的答案。我还没有回去试过,但我确实投票结束了我的问题,因为这是一个重复的问题。谢谢在经历了很多相关的问题之后,这个问题解决了我的问题,也为我解决了。谢谢,我确认一下。是的,自定义类必须只为单元格指定,而不是为文件的所有者指定。在那之后,做出口参考。谢谢你的评论。由于某些原因,XCode无法将我的一个自定义单元格的.m文件添加到生成目标,即使在我添加新类时通常会这样做。这为我解决了这个问题。我可能不会认为这是一个潜在的原因。
ContentPackCell *cell = (ContentPackCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
  [self.cellNib instantiateWithOwner:nil options:nil]; //Make owner nil
  cell = tmpCell;
  self.tmpCell = nil;
}