Swift:应用程序因未捕获的异常“NSUnknownKeyException”而终止
Posted
技术标签:
【中文标题】Swift:应用程序因未捕获的异常“NSUnknownKeyException”而终止【英文标题】:Swift: App terminating due to uncaught exception 'NSUnknownKeyException' 【发布时间】:2014-11-09 16:01:40 【问题描述】:我正在开发一个简单的游戏,在加载特定的 UIViewController(称为 SPSwipes.swift)时遇到了问题。在屏幕上,有三个按钮:5,10和25.当挑选一个变量时,在该场景中设置和播放器上移动 到主游戏:GameScene.swift。
据我所知,变量在 GameScene 中被识别,但是当我打开时出现 'NSUnknownKeyException' 错误在模拟器中打开 SPSwipes 视图。这是通过转场完成的。以下是错误的详细信息:
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
提前谢谢你,
会
【问题讨论】:
This class is not key value coding-compliant for the key 的可能重复项 【参考方案1】:问题在于按钮链接到许多 IBActions - 其中三个不存在。我右键单击界面生成器中的按钮并删除了旧的和不相关的链接,解决了问题。
【讨论】:
【参考方案2】:对我来说,这是因为我有多个视图连接到不存在的 IBOutlets
想知道如何找出答案:
1- 点击整个视图控制器
2- 转到:显示连接器检查器
在那里你会找到所有未连接的插座
【讨论】:
我遇到了完全相同的问题。谢谢!【参考方案3】:尝试根据您在 Interface Builder 中设置的内容加载视图时发生异常。它正在寻找fiveSwipes
而没有找到它。如果您编辑了代码并忘记更新 IB 中的连接,就会发生这种情况。
您是否在 IB 中建立了一个名为 fiveSwipes
的连接,这不是这个函数?也许是一个名为fiveSwipes
的变量?解决问题的方法是在 IB 中找到连接不良的元素并清除该连接。
【讨论】:
你说的是哪个视图控制器?【参考方案4】:这是一个老问题,其他答案无助于解决我的问题,所以想在这里留下这个答案可能会帮助其他人。
我们的应用程序包含多个“目标”,现在恰好 ViewController 指向特定目标,并且仅在该目标上此 ViewController 有效。在其他目标上运行时,应用会因此错误而崩溃。
因此,对于有多个“目标”的人,请务必检查“身份检查器”中的“模块”,并确保选中“从目标继承模块”。
【讨论】:
【参考方案5】:另一个可能的原因是,如果您使用 nibName:bundle: 初始化控制器,并且您将错误的 nib 名称传递给它 - 其他一些不适合该控制器的 nib。最终结果是一样的,你可能会有一堆在 Controller 和 nib 之间不匹配的 @IBOutlets。
【讨论】:
以上是关于Swift:应用程序因未捕获的异常“NSUnknownKeyException”而终止的主要内容,如果未能解决你的问题,请参考以下文章
Swift:以 NSException 类型的未捕获异常终止
Swift 项目以 NSException 类型的未捕获异常终止