我试图将UILabel与在类中创建的IBOutlet链接起来。
我的应用程序崩溃与以下错误。
这是什么意思?
我该怎么解决呢?
***终止应用由于未捕获异常'NSUnknownKeyException',原因:'[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]:这个类不是键值编码兼容的键XXX。'
我试图将UILabel与在类中创建的IBOutlet链接起来。
我的应用程序崩溃与以下错误。
这是什么意思?
我该怎么解决呢?
***终止应用由于未捕获异常'NSUnknownKeyException',原因:'[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]:这个类不是键值编码兼容的键XXX。'
当前回答
看看其他的答案,似乎有很多事情可以导致这个错误。这里还有一个。
如果你
拥有自定义视图 添加了@IBInspectable属性 然后又删除了
那么您也可能会得到类似的错误
在[您的自定义]上设置(xxx)用户定义的被检查属性失败 视图)……:这个类不是键值编码兼容的 [xxx]。
解决方案是删除旧属性。
打开类的Identity检查器,在User Defined Runtime Attributes下选择属性名,然后按减号按钮(-)。
其他回答
"这个类不符合键值编码" 我知道有点晚了,但我的答案是不同的,所以我认为它需要张贴,我推错了第二个控制器的方式,这里是样本
错误的推控制器方式
UIViewController* controller = [[UIViewController
alloc]initWithNibName:@"TempViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:true];
正确的方法
TempViewController* controller = [[TempViewController
alloc]initWithNibName:@"TempViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:true];
我没有找到如上的答案,所以它可能可以帮助一些有同样问题的人
当我试图实现一个表的自定义ViewCell时,我有这个错误。当我突出显示XIB的视图控制器并连接到CellView中的元素时,会导致错误“这个类不是键值编码兼容的键”,一旦我删除了这些,它就摆脱了错误。
删除下图中的连接。
只要确保你只有与表格视图单元格的连接。要检查,单击表视图单元格,并在检查器中寻找您的连接。
我在为表视图原型单元创建的自定义类的所有出口上都遇到了这个错误。出口都正确地连接到故事板,并且Class字段在原型单元格的标识检查器中被正确地命名。
删除和重新创建出口都不起作用。清理构建没有起作用。最后有效的方法是将故事板标识检查器中的Class更改为默认的UITableViewCell,点击Enter,然后将其更改为自定义类的名称。出于某种原因,这奏效了。
再加上这个,因为我也得到了这个错误。所有这些答案似乎都适用于处理UI和故事板之类的东西。我知道原来的海报似乎与用户界面工作,但当搜索这个错误的可能原因时,大多数问题都指向这个问题,其他问题被关闭为重复或简单地有问题,连接在一个故事板的东西,所以我将添加我的解决方案。
我当时正在编写Swift 2的web服务代码。我已经构建了所有需要的代理对象和存根。当我循环通过返回的XML,我是动态实例化我的对象,这都来自NSObject和使用setValue:forKey对他们。每次setValue:forKey试图设置一个属性时,都会出现这个错误。
对于我处理的每种类型,我都有一个switch语句(例如Bool?, CShort ?),对于每个XML节点,我检查了对象上的类型,然后将值转换为该类型,并尝试使用setValue:forKey设置它。
最终,我开始注释掉所有这些setValue:forKey行,并发现我的默认开关语句情况下对字符串有效。
我终于明白,你不能使用可选的swift类型setValue:forKey,除非他们有一个直接映射到Objective-C类型如字符串?还是NSNumber ?。我最终改变了所有的CShort?类型到NSNumber?因为它有一个直接的映射。Bool吗?在我的例子中,使用Bool值并将其初始化为false就可以了。其他人可能没有这种奢侈。
不管怎样,这是多么令人头痛的问题,希望这能帮助那些有类似问题的人,并不断被重定向到这个问题,并对自己说,“我没有在UI中做任何事情!!”
最后重申一次键值编码不适用于可选选项。下面我最终找到了一个地方,但我忘记了在哪里,所以我向张贴这篇文章的人道歉,如果我记得我在哪里找到了这篇文章,我会称赞它,但它救了我的命:
你不能在可选的Int属性上使用KVC,因为KVC是Cocoa / Objective-C和Objective-C不能看到可选Int,它不是 桥接到Objective-C。Objective-C只能看到 桥接到Objective-C: 从NSObject派生的类类型 使用@objc公开的类类型 桥接的快速结构
我也有同样的问题,原因是在接口生成器中指定了一个模块(而不是让它为空)。所以,当我使用一个不同于我设置的模块时,应用程序会崩溃:S…希望这能帮助别人,因为我的问题不是由于损坏或过时的出口!