iOS异常:NSUnknownKeyException:“;此类不符合密钥“的键值编码”;将xib作为所有者连接到ViewController后

iOS异常:NSUnknownKeyException:“;此类不符合密钥“的键值编码”;将xib作为所有者连接到ViewController后,ios,swift,xcode,Ios,Swift,Xcode,我想用ViewController创建一个XIB。 因此,我创建了带有ViewController的XIB(名为Test.XIB),并将文件的所有者自定义类设置为ViewController(名为:TestViewController) 到目前为止还不错。我可以在另一个视图控制器中加载xib,并将其添加为子视图,如下所示: let vc = Bundle.main.loadNibNamed(xibName, owner: self, options: nil)?.first as! UIView

我想用ViewController创建一个XIB。 因此,我创建了带有ViewController的XIB(名为Test.XIB),并将文件的所有者自定义类设置为ViewController(名为:TestViewController)

到目前为止还不错。我可以在另一个视图控制器中加载xib,并将其添加为子视图,如下所示:

let vc = Bundle.main.loadNibNamed(xibName, owner: self, options: nil)?.first as! UIViewController
vc.view.frame = contentView.bounds
vc.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]

addChildViewController(vc)

contentView.addSubview(vc.view)
当我想通过在助手编辑器中拖动ViewController中的xib来创建IBOutlet时,就会出现错误

我查看了其他关于这个错误的帖子,但似乎没有任何东西可以解释为什么会发生这种情况,我无法用建议的解决方案来解决它

我在“连接检查器”中看到,引用插座从StackView链接到“文件的所有者”。对吗


该项目采用干净的swift体系结构,因此,视图有一个ViewController和几个与之配套的类(Interactor、Presenter等)。遗憾的是,如果我的XIB从UIView扩展,我认为我不能做这些事情。这就是我希望它从UIViewController扩展的原因。从视图控制器扩展也可以。请再试一次。很抱歉,我仍然没有得到它。这不正是我正在做的吗?我的名为Test.xib的xib有自己的名为TestViewController的ViewController文件,我在xib文件中将其设置为所有者。你解决了这个问题了吗,我也被困在这个问题上了我正在创建一个单独的类,就像这个答案建议的那样,只要我不通过文件所有者添加一个iboutlet,一切都可以正常工作,当我添加它时,我得到以下错误:
由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:该类与key contentView的键值编码不兼容。”
顺便说一句,我已在示例项目中成功添加了一个xib,它在我当前的项目中不起作用,我不知道问题出在哪里。更新答案,请立即尝试。它在所有情况下都适用。
class YourViewClass:UIView{

       public static let nibName = "YourViewClass"
       public static let nib = YourViewClass.getNib()
       class func getNib() -> UINib {
           return UINib(nibName: YourViewClass.nibName, bundle: nil)
        }

  class func viewFromNib()-> YourViewClass {
       let nib = YourViewClass.getNib()
       return nib.instantiate(withOwner: self, options: nil).first as! YourViewClass
 }    }