Swift此类不适用于键Error的键值编码兼容

时间:2019-01-30 07:08:29

标签: ios swift

由于未捕获的异常,我在终止应用程序时出错

'NSUnknownKeyException', reason: '[<KGM_IOS.NotEkle 0x7fcb5ee0cd40> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key notEkleTextView.'.

我有一个名为“ notEkle”的XIB,在“ notEkle”内部,我有UITextView,而XIB提供程序是ViewController。当我将此文本与控制器连接时,出现此错误。我将XIB加载到控制器中,例如

let notEkleView: UIView =  NotEkle().loadNib() as UIView

我将文本视图与控制器连接

@IBOutlet weak var notEkleTextView: UITextView!

在连接UITextview和控制器之前,我没有任何问题。

let notEkleView: UIView =  NotEkle().loadNib() as UIView
extension UIView {
    func loadNib() -> UIView {
        let bundle = Bundle(for: type(of: self))
        let nibName = type(of: self).description().components(separatedBy: ".").last!
        let nib = UINib(nibName: nibName, bundle: bundle)
        return nib.instantiate(withOwner: self, options: nil).first as! UIView
    }
}

7 个答案:

答案 0 :(得分:2)

一切都适合我,但仍然出现此错误,然后我通过以下方式解决了

  • 在Identity Inspector中启用“从Target继承模块”。或
  • 从“身份检查器”的“自定义类”中提供存在该模块的模块(通常是文件夹名称/组名称)

答案 1 :(得分:1)

有几个步骤来定义XIB并以编程方式使用它。

  1. 首先,您需要创建具有相同名称的XIB文件和Swift文件。

  2. 根据需要进行设计,然后将文件的所有者连接为您在步骤1中定义的类名称。

  3. 您需要定义一个通用的初始化方法,并覆盖两个初始化方法(使用帧和编码器)。

  4. 在XIB中将整个视图作为Swift类中的IBOutlet进行连接。

  5. 实施通用初始化程序,如下所示:

private func commonInitializer() {
    Bundle.main.loadNibNamed("testView", owner:self, options: nil)
    addSubview(contentView)
    contentView.frame = self.bounds
    contentView.autoresizingMask = [.flexibleHeight,.flexibleWidth]
}
  1. 最后,您可以将UIView拖到任意位置,并将其类设置为该自定义类。

有关更多详细信息,您可以查看本教程here

答案 2 :(得分:0)

在声明类的连接出口后,就像将其从xib文件拖到类(所有者)中一样,它应该像这样:

@IBOutlet weak var notEkleTextView: UITextView!

在您的情况下,它不能正常工作,这意味着您还提供了其他课程

您的视图控制器的xib中的类可能错误。 检查文件所有者,并在VC中检查文件检查器是否正确分配了类

答案 3 :(得分:0)

请确保以下内容:

  1. 在xib内,将视图的基类设置为NotEkle。
  2. 像这样{@ {1}}

答案 4 :(得分:0)

This class is not key value coding-compliant for the key

当插座未从情节提要板正确连接到视图控制器时,会发生这种情况。

答案 5 :(得分:0)

确保在初始化函数中输入了正确的“ nibName” ScreentShot Attached

init(pages : [Page],holder : UIView) {
    self.pages = pages
    self.holder = holder
    super.init(nibName: "PagerViewNew", bundle: nil)
}

我放了“ PagerView”而不是“ PagerViewNew”

答案 6 :(得分:0)

我重新构建了项目,并添加了故事板,但出现了这个错误。我通过选择正确的项目模块来解决它。故事板> ViewController> Identity Inspector>模块