SwiftUI集成UIKit视图时NSUnknownKeyException异常排查请求
以下是几个常见的触发原因及解决办法:
Outlet连接对象错误
你把TestViewVC设为File Owner后,连接Outlet时必须从XIB里的File Owner黄色方块拖到标签控件,而不是从View蓝色方块拖。如果误连到View,加载时XIB会尝试在View实例上寻找对应的IBOutlet属性,自然找不到,直接抛出异常。
修复:打开XIB,选中标签控件,在右侧Connections Inspector里检查Outlet的连接对象,确保指向File Owner的对应属性,错误的话删除重连。UIViewRepresentable中VC加载逻辑错误
很多人会犯的错误是在makeUIView里直接加载XIB的View,却没正确初始化VC并关联XIB。比如这种错误写法:func makeUIView(context: Context) -> UIView { return Bundle.main.loadNibNamed("TestView", owner: nil, options: nil)?.first as! UIView }这里没有把TestViewVC设为XIB的owner,导致XIB里的Outlet找不到所属的VC实例。正确的做法是先初始化VC,再返回它的View:
func makeUIView(context: Context) -> UIView { let vc = TestViewVC(nibName: "TestView", bundle: nil) return vc.view }XIB与VC的关联不匹配
检查TestViewVC初始化时传入的nibName是否和XIB文件名完全一致,包括大小写。另外,确认XIB的File Owner类确实是TestViewVC,没有误设成其他类。残留无效Outlet连接
如果之前修改过TestViewVC里的IBOutlet属性名、删除过属性,但XIB里还保留着旧的连接,也会触发异常。打开XIB的Connections Inspector,查看File Owner的Outlets列表,删掉那些带红色感叹号的无效连接,再重新正确连接属性。
内容的提问来源于stack exchange,提问作者keith.g

