Swift: 应用程序因未捕获的异常'NSUnknownKeyException'而终止。

16

我正在开发一个简单的游戏,但在加载名为SPSwipes.swift的特定UIViewController时遇到了问题。屏幕上有三个按钮:5、10和25。当选中其中一个按钮时,在该场景中设置一个变量并使玩家进入主游戏:GameScene.swift

据我所知,变量在GameScene中被识别,但是在模拟器中打开SPSwipes视图时出现'NSUnknownKeyException'错误。这是通过segue的方式完成的。以下是更详细的错误信息

2014-11-09 15:32:43.718 Swipe Racer[2644:1620056] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Swipe_Racer.SPSwipes 0x7fbf52d461b0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key fiveSwipes.'
*** First throw call stack:
(
0   CoreFoundation                      0x000000010c021f35 __exceptionPreprocess + 165
1   libobjc.A.dylib                     0x000000010dd1bbb7 objc_exception_throw + 45
2   CoreFoundation                      0x000000010c021b79 -[NSException raise] + 9
3   Foundation                          0x000000010c4397b3 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 259
4   CoreFoundation                      0x000000010bf6be80 -[NSArray makeObjectsPerformSelector:] + 224
5   UIKit                               0x000000010cd28c7d -[UINib instantiateWithOwner:options:] + 1506
6   UIKit                               0x000000010cb87f98 -[UIViewController _loadViewFromNibNamed:bundle:] + 242
7   UIKit                               0x000000010cb88588 -[UIViewController loadView] + 109
8   UIKit                               0x000000010cb887f9 -[UIViewController loadViewIfRequired] + 75
9   UIKit                               0x000000010cb88c8e -[UIViewController view] + 27
10  UIKit                               0x000000010caa7ca9 -[UIWindow addRootViewControllerViewIfPossible] + 58
11  UIKit                               0x000000010caa8041 -[UIWindow _setHidden:forced:] + 247
12  UIKit                               0x000000010cab472c -[UIWindow makeKeyAndVisible] + 42
13  UIKit                               0x000000010ca5f061 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2628
14  UIKit                               0x000000010ca61d2c -[UIApplication _runWithMainScene:transitionContext:completion:] + 1350
15  UIKit                               0x000000010ca60bf2 -[UIApplication workspaceDidEndTransaction:] + 179
16  FrontBoardServices                  0x000000011383b2a3 __31-[FBSSerialQueue performAsync:]_block_invoke + 16
17  CoreFoundation                      0x000000010bf5753c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
18  CoreFoundation                      0x000000010bf4d285 __CFRunLoopDoBlocks + 341
19  CoreFoundation                      0x000000010bf4d045 __CFRunLoopRun + 2389
20  CoreFoundation                      0x000000010bf4c486 CFRunLoopRunSpecific + 470
21  UIKit                               0x000000010ca60669 -[UIApplication _run] + 413
22  UIKit                               0x000000010ca63420 UIApplicationMain + 1282
23  Swipe Racer                         0x000000010be380de top_level_code + 78
24  Swipe Racer                         0x000000010be3811a main + 42
25  libdyld.dylib                       0x000000010e507145 start + 1
26  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)

正如您所看到的,我的第一个变量fiveSwipes存在问题(我想其他两个变量也有错误)。"this class is not key value coding-compliant for the key fiveSwipes"是什么意思?我该如何修复它?

我的SPSwipes.swift文件:

class SPSwipes: UIViewController {

var no_of_swipes = 0

@IBAction func fiveSwipes(sender: AnyObject) {
    no_of_swipes = 5

//and so on

}

提前感谢您。

威尔


可能是重复的问题:此类不符合键值编码规范 - jtbandes
5个回答

31
问题出在这个按钮链接了多个IBActions,其中有三个不存在。我在Interface Builder(界面编辑器)右键点击按钮,移除了旧的和无关的链接,解决了问题。

3
对我而言,这是因为我有多个视图连接到不存在的IBOutlets。
要了解如何找出:
1- 点击整个视图控制器。

enter image description here

2- 前往:显示连接器检查器

enter image description here

那里你会找到所有未连接的插座。

我遇到了完全相同的问题。谢谢! - Ebru Güngör

2
在 Interface Builder 中加载视图时发生异常。它正在查找 fiveSwipes,但是找不到。这可能是因为您编辑了代码但忘记在 IB 中更新连接。您是否在 IB 中连接了一个名为 fiveSwipes 的东西,而不是这个函数?也许是一个名为fiveSwipes的变量?解决问题的方法是在 IB 中找到具有错误连接的元素,并清除该连接。

1
你在谈论哪个视图控制器? - user4072094

1
这是一个旧问题,其他答案无法解决我的问题,所以我想留下这个答案,可能会帮助其他人。
我们的应用程序包含多个“Targets”,现在情况是ViewController指向特定的目标,并且仅在该目标上此ViewController有效。在运行其他目标时,应用程序会崩溃并显示此错误。
因此,对于那些有多个“Targets”的人,请确保在“Identity Inspector”中检查“Module”,并确保选中“继承模块从目标”。

screenshot


0

这种情况的另一个可能原因是,如果您使用nibName:bundle:初始化控制器,并传递了错误的nib名称 - 一些不属于此控制器的其他nib。最终结果是相同的,您可能会有一堆@IBOutlets在控制器和nib之间不匹配。


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