Gui*_*ois 1143 macos cocoa cocoa-touch interface-builder ios
我正在尝试将a UILabel
与IBOutlet
我班级中的创建链接起来.
我的应用程序崩溃,出现以下错误.这是什么意思?我该如何解决?
***由于未捕获的异常'NSUnknownKeyException'终止应用程序,原因:'[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]:此类不是密钥XXX的密钥值编码.
小智 1496
我多次犯过这个错误.虽然TechZen的答案是在这种情况下绝对正确的,另一种常见的原因是,当你改变一个IBOutlet中属性的名称在您的.h /你已经连接多达文件的所有者在笔尖.M.
从您的笔尖:
在"引用Outlets"下,确保您的对象仍未连接到旧属性名称...如果是,请单击小"x"以删除引用并再次构建.
如果您使用Storyboard是另一个常见原因,您的UIButton可能有多个分配(解决方案几乎与nib相同):
Tec*_*Zen 945
我下载了你的项目.
你得到的错误是
'NSUnknownKeyException',原因:'[<UIViewController 0x3927310> setValue:forUndefinedKey:]:此类不是密钥值的密钥值编码兼容.
它是由Second
视图控制器引起的MainWindow.xib
,UIViewController
而不是SecondView
.更改为正确的类可以解决问题.
顺便说一句,在Objective-C中使用像"string"这样的名称是不好的做法.它会引发运行时命名冲突.即使在一次性练习应用程序中也避免它们 命名冲突很难追查,你不想浪费时间.
此错误的另一个可能原因是:当将元素从一个控制器复制并粘贴到另一个控制器时,Xcode会以某种方式将该链接保留到原始控制器,即使在编辑并将此元素重新链接到新控制器之后也是如此.
此错误的另一个可能原因:
坏口.
您已在文件中删除或重命名了插座名称.h
.
将其删除.xib
或.storyboard
文件的连接检查器.
Ste*_*ers 112
我不得不从模拟器/ iPhone中删除该应用程序以摆脱此错误.
upl*_*com 106
当我尝试为表实现自定义ViewCell时,我遇到了这个错误.当我突出显示XIB的View控制器并连接到CellView中的元素时,导致错误"此类不是键值的关键值编码兼容"一旦我删除了它,它就摆脱了错误.
删除下图中的连接.
只需确保您只与表视图单元格建立连接.要检查单击表视图单元格并在INSPECTOR中查找您的连接.
erk*_*diz 65
如果它是仅限iPhone的应用程序,而不是通用应用程序,请确保以下字段为空:
目标>摘要> iPhone/iPod部署信息>主界面
如果你在那里指定了一个xib,它会崩溃.
Tib*_*abo 60
此错误表示已在其所有者的源(文件所有者)中删除/重命名已连接的Interface Builder 对象.
如果您看到需要修复的感叹号,请按住Control键并单击Interface Builder中的文件所有者.
在下面的图片中,您可以看到"aRemovedView"右侧有一个感叹号,这是因为我已经在IB中连接了IBOutlet视图对象.
这会产生以下错误: 由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]:此类与密钥 aRemovedView 不符合密钥值编码.
Eri*_*tto 41
我有同样的问题,虽然TechZen的答案可能确实令人惊讶,但我发现很难适用于我的情况.
最终,我通过在Objects下面列出的Controller (下图中突出显示)链接标签,而不是通过文件所有者来解决问题.
希望这可以帮助.
Far*_*uti 36
在我的情况下,故事板源代码中的错误,请按照下列步骤操作:
<connections>
例如:
<connections>
<outlet property="mapPostsView" destination="4EV-NK-Bhn" id="ubM-Z6-mwl"/>
<outlet property="mapView" destination="kx6-TV-oQg" id="4wY-jv-Ih6"/>
<outlet property="sidebarButton" destination="6UH-BZ-60q" id="8Yz-5G-HpY"/>
</connections>
Run Code Online (Sandbox Code Playgroud)
如您所见,这些是您的代码变量名称和storyboard布局xml标记之间的连接;)
ash*_*ack 33
我的修复与Gerard Grundy相似.在使用XIB创建自定义UITableViewCell时,我错误地将自定义类名称应用于文件所有者而不是UITableViewCell.将类应用于画布上的UITableViewCell并将我的IBOutlet属性连接到它解决了这个问题.
kub*_*ubi 30
IBOutlet
一次,IBOutlet
您的ivar标签是不必要的.UIViewController
吗?在某些时候你应该打电话[SecondView initWithNibName:@"yourNibName" bundle:nil];
小智 30
只有在设备(iPhone)上进行调试时才会发生这种情况.iOS模拟器工作正常.从Xcode做"Product-> Clean"似乎解决了这个问题,但我不知道为什么.
Yan*_*nis 23
我有完全相同的错误信息,并感谢(!!)来自http://www.idev101.com Kira 我能够解决这个挑战.谷歌搜索和堆叠所有这些线程后,我才找到她的网站.我现在在这里发布下一个来到StackOverFlow并且遇到同样的挑战,因为那个人很可能会通过谷歌来到这个线程.
我意识到,我错误地做了这个:
UIViewController *deviceViewController = [[UIViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];
Run Code Online (Sandbox Code Playgroud)
而不是这个:
DeviceViewController *deviceViewController = [[DeviceViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];
Run Code Online (Sandbox Code Playgroud)
哪里
DeviceViewController
Run Code Online (Sandbox Code Playgroud)
我的班级的名字也被称为
DeviceViewController.h
DeviceViewController.m
Run Code Online (Sandbox Code Playgroud)
你必须这样做
"import DeviceViewController.h"
Run Code Online (Sandbox Code Playgroud)
在你想要调用的实现(.m文件)中,例如另一个UIViewController.
如果我只是为像我这样的初学者说明显而易见并因为这与问题并不完全相关,但我现在正在搜索4(?!?)小时以获得这些错误消息的答案,我绝对不会后悔.如果我可以把这个放到1或2个人身上,那就太棒了:)
PS:对于那些对代码如何继续加载其他UIViewController感兴趣的人:
[self presentViewController:deviceViewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
Sur*_*gch 20
看看其他答案,似乎有很多事情可以导致这个错误.还有一个.
如果你
然后你可能会得到类似的错误
无法在[您的自定义视图]上设置(xxx)用户定义的检查属性...:此类与密钥[xxx]不符合密钥值编码.
解决方案是删除旧属性.
打开您的类的Identity检查器,在User Defined Runtime Attributes下选择属性名称,然后按减号按钮( - ).
neo*_*eye 15
当我的视图控制器最初有一个.xib文件时,会发生这种情况,但现在是以编程方式创建的.
即使我已从此项目中删除.xib文件.用户iPhone/iPad可能包含此viewcontroller的.xib文件.
尝试加载.xib文件通常会导致此崩溃:
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x18afe0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key welcomeLabel.'
Run Code Online (Sandbox Code Playgroud)
以编程方式创建它的解决方案可能是这样的:
-(void)loadView {
// Ensure that we don't load an .xib file for this viewcontroller
self.view = [UIView new];
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*ney 10
对于有两个目标的项目(使用自己的MainWindow XIB),我遇到了类似的问题.导致此错误的根本问题是UIViewController类未包含在第二个项目的资源列表中.即界面构建器允许我在MainWindow.xib中指定它,但在运行时系统无法找到该类.
即cmd-单击相关的UIViewController类,并仔细检查它是否包含在"目标"选项卡中.
只是添加到此,因为我也得到了这个错误.通过所有这些答案,大多数似乎适用于使用UI和故事板的东西.我知道原始海报似乎确实与UI一起工作但是当搜索这个错误的可能原因时,大多数问题都会回到这个问题,其他人被关闭作为重复或只是在故事板中连接事情的问题所以我会添加我的解决方案
我正在编写Swift 2中的Web服务编码.我已经构建了所有需要的代理对象和存根.当我浏览返回的XML时,我动态地实例化我的对象,这些对象都来自NSObject
并使用setValue:forKey
它们.每次setValue:forKey
尝试设置属性时,它都会因此错误而爆炸.
我不得不为每种类型的我正在处理(例如,一个switch语句Bool?
,CShort?
,String?
)和我的经历,并检查什么类型是对象上,然后转换价值那种类型,并试图用它设置每个XML节点setValue:forKey
.
最后我开始评论所有这些setValue:forKey
行,并发现我的default
switch语句案例确实有效String?
.
我终于发现你不能使用可选的swift类型,setValue:forKey
除非它们直接映射到Objective-C类型,如String?
或NSNumber?
.我最终改变了所有CShort?
类型,NSNumber?
因为它有直接映射.对于Bool?
我的情况还不错,我只是用Bool
它初始化false
.其他人可能没那么奢侈.
无论如何,令人头疼的是,希望这有助于其他有类似问题的人,并不断重定向到这个问题并对自己说,"我在UI中没有做任何事情!".
因此,最后重申一次键值编码不适用于选项.下面我最终找到了某个地方,但是我忘记了发布这个的人在哪里我道歉并且如果我记得我发现这个但是它挽救了我的生命会给予赞扬:
您不能在Optional Int属性上使用KVC,因为KVC是Cocoa/Objective-C,而Objective-C看不到可选Int - 它没有桥接到Objective-C.Objective-C只能看到桥接到Objective-C的类型:
从NSObject派生的类类型
使用@objc公开的类类型
桥接的Swift结构
"这个类不是关键值编码兼容的关键"我知道它有点晚但我的答案是不同的所以我认为它需要发布,我是以错误的方式推动第二个控制器,这里是样本
推送控制器的错误方法
UIViewController* controller = [[UIViewController
alloc]initWithNibName:@"TempViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:true];
Run Code Online (Sandbox Code Playgroud)
正确的方式
TempViewController* controller = [[TempViewController
alloc]initWithNibName:@"TempViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:true];
Run Code Online (Sandbox Code Playgroud)
我没有找到像上面那样的答案,所以它可以帮助一些人有同样的问题
我刚刚在我的重复项目中遇到了这个问题,并通过检查2个地方来解决:
1-确保列表中有.m文件 - >项目 - 构建阶段 - 编译源代码
2-之后,转到界面构建器(可能这只是IB发生错误)并取消链接所有属性,标签,图像等等......然后重新连接所有.我已经意识到我删除了一个属性,但它仍然在IB中链接.
希望它适用于某些人.
我找到的另一个"不合规"的问题是,由于某种原因我设法获得了两个班级的副本.
我正在为错误的副本添加密钥.Interface Builder仍然看到了密钥,让我联系到它们,但在运行时它使用的是没有新密钥的类的另一个副本.
为了找到哪个是"正确的"副本,我使用XCode的cmd-点击其他地方的类名来跳转到正确的副本,然后我杀掉了坏的未使用的副本(在从未使用的副本首先引入我的编辑之后).
故事的道德:重复的类文件很糟糕.
这个错误是别的!
这是我如何修复它.我正在使用xcode Version 6.1.1并使用swift.每当我的应用程序尝试执行segue跳转到下一个屏幕时,我都会收到此错误.这就是我做的.
干杯,
我有同样的症状.根本原因是我的源文件的"目标成员资格"未设置为正确的目标.我认为这意味着我的课程不会被构建并包含在我的应用程序中.
要纠正它:
希望这有助于那里的人.
如果你有一个带有IBOutlets的自定义UIViewController子类导致问题,我发现实际摆脱错误的唯一一组步骤是
.1将类更改为UIViewController
.2断开所有插座(它们现在都有黄色警告三角形) - 仅断开有问题的插座可能就足够了.
.3执行所有标准步骤 - ↑⌘K,删除派生数据(,祈祷垫,担心珠)
.4启动应用程序 - 转到有问题的场景.
.5终止应用程序,返回Interface Builder,将类更改回自定义类名.
.6重新连接插座.
启动应用程序,这通常会清除键值合规性问题.
归档时间: |
|
查看次数: |
828674 次 |
最近记录: |