这个类不符合键值编码规范。

5
我创建了三个文件SettingsViewController.h、SettingsViewController.m和SettingsViewController.xib。
当点击行中的单元格时,我会显示SwttingsViewController.xib。xib文件中有一个标签和滑块,它工作正常。但是在使用接口构建器创建连接(即从redLabel输出到xib文件上的我的标签进行拖放)后,我遇到了这个错误并且应用程序终止。
“'[<UIViewController 0x3d636d0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key redLabel.'”
6个回答

6
我遇到了类似的问题,但是我的问题是接口生成器没有清理掉我删除的一个项目。所以它留在了源代码中。
通过进入xib文件来解决这个问题。右键单击文件,选择“打开方式”,然后选择“源代码”。 我得到的错误信息包含: 此类不符合关键值编码的key originalField
正如您所看到的,我的错误消息给了我冒犯项的名称“originalField”,在这种情况下,它是一个文本字段,我已经删除了它,但是接口生成器没有正确清理。
我进入源代码并搜索原始字段,并删除对它的引用,所有问题都解决了。

3
看起来 SwttingsViewController.xib 的文件所有者类别错误。 进入Interface Builder并将File Owner的类更改为SettingsViewController。 有关File Owner和UIViewController的详细信息,请参见此页面

我在界面构建器中指向正确的文件。无论我的文件所有者类型为空还是SettingsViewController,它都会给我相同的错误。 - coure2011
是的,您说得对,在代码中我没有正确初始化控制器。我之前是这么做的(错误的方式) controller = [[UIViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil]; - coure2011
应该是:controller = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil]; - coure2011

0
通常出现此错误的原因是在源代码中重命名属性或方法,但未将控件从旧值断开连接并重新连接到新命名的值。
由于我们知道此错误消息通常意味着您的xib或storyboard中存在一个控件与源代码中不存在的属性或操作相连接。并且记住每个@property都会创建一个setPropertyName设置器方法和一个propertyName获取器。您可以在连接检查器中检查xib中的每个控件是否仍连接到有效的IBOutlet或IBAction。
为避免此问题,请使用重构->重命名菜单选项,Xcode将确保更新两个条目。

0

当我为一个继承自UIView的对象创建.xib时,我遇到了同样的问题。

问题在于:在创建约束时,有一个“对象”下拉菜单,其中包含两个值:“文件所有者”和我的对象名称:“Popover View”。

如果选择“文件所有者”,即使只添加了一个输出口,它也会失败。然而,当重新添加所有输出口并将其类名更改为“PopoverView”时,它就可以从Nib中正常创建,而不会出现“键值编码兼容错误”的问题。

请参见屏幕截图。 enter image description here

我确实双重检查了我的文件所有者是否设置正确,方法是在Nib中点击我的顶级视图:“PopoverView”,然后选择“自定义类”选项卡,并确保在那里将其设置为“PopoverView”。请参见屏幕截图: enter image description here

所以唯一帮助我的事情是:在创建约束时,确保我的“Popover View”类名称在“Object”字段下被选中,而不是文件所有者。

0

谢谢Harold! 你的回答帮我解决了问题! 我删除了一个NSString变量,但nib没有清理干净。 最快的方法是删除nib并创建另一个,这解决了问题。 谢谢, Gaz。


0

我遇到了这个问题,但是为了解决它,我不得不更改我的视图控制器下的class字段中的module字段为none,因为它被填充了我的项目模块,但那并不正确。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接