此类不符合键值编码

时间:2013-10-23 03:41:46

标签: ios objective-c xcode iboutlet

当我尝试在iPhone模拟器上运行我的应用程序时,它崩溃并且我收到此错误:

2013-10-22 20:24:02.367 brainademy[46328:a0b] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIApplication 0xcc6de90> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key ChooseGameViewController.'
*** First throw call stack:
(
0   CoreFoundation                      0x01a0d5e4 __exceptionPreprocess + 180
1   libobjc.A.dylib                     0x017908b6 objc_exception_throw + 44
2   CoreFoundation                      0x01a9d6a1 -[NSException raise] + 17
3   Foundation                          0x01451c2e -[NSObject(NSKeyValueCoding) setValue:forUndefinedKey:] + 282
4   Foundation                          0x013bdf3b _NSSetUsingKeyValueSetter + 88
5   Foundation                          0x013bd493 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 267
6   Foundation                          0x0141f94a -[NSObject(NSKeyValueCoding) setValue:forKeyPath:] + 412
7   UIKit                               0x007a4cd5 -[UIRuntimeOutletConnection connect] + 106
8   libobjc.A.dylib                     0x017a27d2 -[NSObject performSelector:] + 62
9   CoreFoundation                      0x01a08b6a -[NSArray makeObjectsPerformSelector:] + 314
10  UIKit                               0x007a382e -[UINib instantiateWithOwner:options:] + 1417
11  UIKit                               0x007a55bb -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 165
12  UIKit                               0x00502fcb -[UIApplication _loadMainNibFileNamed:bundle:] + 58
13  UIKit                               0x005032f9 -[UIApplication _loadMainInterfaceFile] + 245
14  UIKit                               0x00501e9f -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 543
15  UIKit                               0x0051642c -[UIApplication handleEvent:withNewEvent:] + 3447
16  UIKit                               0x00516999 -[UIApplication sendEvent:] + 85
17  UIKit                               0x00503c35 _UIApplicationHandleEvent + 736
18  GraphicsServices                    0x0319e2eb _PurpleEventCallback + 776
19  GraphicsServices                    0x0319ddf6 PurpleEventCallback + 46
20  CoreFoundation                      0x01988dd5 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
21  CoreFoundation                      0x01988b0b __CFRunLoopDoSource1 + 523
22  CoreFoundation                      0x019b37ec __CFRunLoopRun + 2156
23  CoreFoundation                      0x019b2b33 CFRunLoopRunSpecific + 467
24  CoreFoundation                      0x019b294b CFRunLoopRunInMode + 123
25  UIKit                               0x005016ed -[UIApplication _run] + 840
26  UIKit                               0x0050394b UIApplicationMain + 1225
27  brainademy                          0x0000b01d main + 141
28  libdyld.dylib                       0x02e8c725 start + 0
)
libc++abi.dylib: terminating with uncaught exception of type NSException

大多数情况下,这意味着我的文件所有者,IBOutlet或IBAction中没有声明,但事实并非如此。我看过像这样的每一个问题,但没有一个问题有帮助。

ChooseGameViewController IS 声明,所以这不应该导致任何问题,但我尝试从文件的所有者解除它,当我这样做,并运行我的应用程序,它崩溃,而不是ChooseGameViewController它是ColorGameViewController。我尝试删除我的每一个ViewController IBOutlets,当我这样做时,我得到了其他IBOutlets,如标签和按钮,出现在错误而不是ChooseGameViewController。我的任何商店旁边都没有任何错误,就像你通常会有一个未申报的商店一样。

我尝试制作一个干净的版本,但这不起作用,我的文件所有者连接到正确的类(RootViewController)

这个应用程序刚刚运行正常,我今天刚刚打开Xcode,我开始收到这些错误。

对于未声明的商店,这不是问题,因为:

  • 所有出口 ARE 已宣布
  • 我的文件所有者
  • 没有错误
  • 每个 IBOutlet 和仅IBOutlets发生此错误

此错误的原因是什么?

3 个答案:

答案 0 :(得分:1)

我通过创建一个新的Xcode项目并将所有内容复制来修复它,这让我觉得它与我试图添加对iPad的支持有关。

每当我尝试这样做时,甚至会创建一个新的应用程序,使其成为通用的,并为iPad制作新的.xib文件,并通过项目经理将其挂钩,就会发生这种情况。

即使我删除对iPad的支持,上面的错误仍然显示,我想我只需要使用代码更改视图控制器即可。

答案 1 :(得分:0)

它不应该ChooseGameViewController上的UIApplication

我猜您的AppDelegate有一个属性ChooseGameViewController,因此您需要转到界面构建器并确保您的商店与AppDelegate挂钩而不是UIApplication

如果你有源代码控制,请做一个差异,看看有什么变化。否则,您可以使用XML编辑器打开.xib文件,并检查它是否在意外的地方不包含UIApplication

答案 2 :(得分:-1)

当我从类中删除一个IBOutlet属性时,我遇到了同样的问题。我看到即使删除IBOutlet属性,storyboard仍保留IBOutlet链接。

<强>解决方案

  1. 如果您删除了任何Outlet属性
  2. ,请在您的班级中查找
  3. 导航到故事板,找到对象和Outlet链接 并删除
  4. 希望这对你有用。

相关问题