加载XIB时,该类未针对关键值编码符合标准的密钥。

19
我刚刚创建了名为PopupViewForViewMoreDetail的自定义UIView,我想将此自定义视图添加到我的ViewController中,但每次都会出现以下错误:
终止应用程序,由于未捕获的异常'NSUnknownKeyException',原因:'[<0x7f8155f2e430> setValue:forUndefinedKey:]:此类不符合键值编码的要求,无法设置mainView键。'
如果我删除mainView的IBOutlet,那么另一个变量将显示错误。
以下是我的代码
import UIKit

class PopupViewForViewMoreDetail: UIView {

    @IBOutlet var darkBGView: UIView!
    @IBOutlet var outerView: UIView!
    @IBOutlet var mainView: UIView!
    @IBOutlet var btnClose: UIButton!

    override init(frame: CGRect) {
        super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

我在viewController类中以以下方式添加了这个视图。

 let viewMoreDetailPopUp =  Bundle.main.loadNibNamed("PopupViewForViewMoreDetail", owner: self, options: nil)?.first as! PopupViewForViewMoreDetail
        self.view.addSubview(viewMoreDetailPopUp)

以下是我关于IBOutlets的截图:

enter image description here

我也查看了下面的答案,但没有帮助到我。

这是什么意思?“'NSUnknownKeyException',原因:…此类不支持键值编码关键字X”

请指导我在代码中哪里出错了?


owner: self更改为owner: nil - matt
我进行了更改,但仍然无法正常工作。 - Govaadiyo
2个回答

56

试一下这个:

步骤1:

let viewMoreDetailPopUp =  UINib(nibName: "PopupViewForViewMoreDetail", bundle: nil).instantiate(withOwner: self, options: nil).first as! PopupViewForViewMoreDetail

步骤2: 确保您为视图设置类,而不是文件所有者。输入图像描述

输入图像描述

步骤3: 删除所有出口并重新创建出口。


22
连接插座到视图而不是文件所有者,这是关键。谢谢! - Crashalot
@TungVuDuc,你能解释一下为什么在这里需要设置视图的类而不是文件所有者的类吗? - Johnson_145
1
@Johnson_145 因为当你从nib创建一个view时,它的子视图属于它的view而不是文件所有者。 - Tung Vu Duc
1
谢谢。节省了我的时间。 - Antony Wong
4
这是唯一有效的解决方案!请注意:在按照@TungVuDuc描述的步骤后,如果仍然出现相同的错误,请检查从“文件所有者”指向的出口。如果您在尝试使其工作时创建了它们,则可能需要删除它们! - Bogdan Razvan
显示剩余3条评论

2

对我来说,我的做法是复制了一个xib文件以创建一个新的变体,并且取消勾选了继承自目标的模块。


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