我将我的代码从Objective-C转换为Swift的快要结束了,我开始将视图控制器类转换为Swift。我设法解决了大多数与视图控制器有关的问题,但我的一个View控制器却不断收到此错误。
当崩溃时:“线程1信号异常”
错误日志:
Terminating app due to uncaught exception 'NSUnknownKeyException',
reason: '[<UIViewController 0x7fd98fc65ee0> setValue:forUndefinedKey:]:
this class is not key value coding-compliant for the key background.'
注意:在这种情况下,“背景”是UIImageView插座。
我经历了多个解决方案,似乎没有一个对我有帮助。我尝试过:
清理构建文件夹
在模拟器上删除应用程序
删除派生文件夹
检查多余的IBOutlets
删除连接并重新连接
重命名插座
在情节提要中检查额外的连接
调试viewDidLoad()函数
这是我的代码:
IBOutlet var background: UIImageview!
override func viewDidLoad() {
super.viewDidLoad()
let image: UIImage = UIImage(named: UserDefaults.standard.string(forKey: "Background")!)!
background.image = image
...
}
答案 0 :(得分:3)
错误消息中显示了问题:
[UIViewController 0x7fd98fc65ee0> setValue:forUndefinedKey:]:
因此,您需要在情节提要中将此视图控制器的类设置为具有background
属性的真实视图控制器的类。
您很有可能已经正确设置了此设置,但是它仅在Objective-C中有效。如果您进入身份检查器并删除该类,然后按回车键,然后再次输入该类,然后按回车键,您将看到现在身份检查器看到我们应该从Swift模块获取该类,一切将在Swift中开始。
基本上,根本原因可能是Swift的名称修改。名为MyClass的Objective-C类实际上称为MyClass,但没有名为MyClass的Swift类。删除名称并重新输入该名称会向Objective-C显示班级的新名称。