此类与@IBInspectable不符合键值编码

时间:2015-09-09 17:00:26

标签: ios swift

我在自定义视图上创建了一个@ IBDesignable ,以便从IB设置属性。但是我觉得这个课程不符合关键值编码,尽管我班上有这个属性。

@IBDesignable class ExclusiveSelectorView: UIView {
    @IBInspectable var cellWidth: CGFloat?
}

无法在(Test.ExclusiveSelectorView)上设置(cellWidth)用户定义的检查属性:[setValue:forUndefinedKey:]:此类与密钥cellWidth不符合密钥值编码。

enter image description here

这是我的班级 enter image description here

1 个答案:

答案 0 :(得分:9)

您无法将基元定义为@IBInspectable的可为空。

当您尝试这样做并设置其中一个属性的值时,您将在IBDesignable时间收到以下警告:

  

@IBDesignable类TestDesignable    IB Designables:忽略关键路径的用户定义的运行时属性" testInt"在" TestDesignable"的实例上。尝试设置其值时遇到异常:[setValue:forUndefinedKey:]:此类不是键testInt的键值编码兼容。

在运行时,您将收到以下错误:

  

无法在(TestDesignable)上设置(testInt)用户定义的检查属性:[setValue:forUndefinedKey:]:此类与关键testInt不符合键值编码。

要修复它,请将其从可选项更改为非可选项,并为其指定一些默认值。

无效:

@IBDesignable class TestDesignable: UIView {
  @IBInspectable var testInt: Int? = nil // crash
  @IBInspectable var testFloat: CGFloat? = nil // crash
  @IBInspectable var testPoint: CGPoint? = nil // crash
  @IBInspectable var testColor: UIColor? = nil
}

有效:

@IBDesignable class TestDesignable: UIView {
  @IBInspectable var testInt: Int = 0
  @IBInspectable var testFloat: CGFloat = 0
  @IBInspectable var testPoint: CGPoint = .zero
  @IBInspectable var testColor: UIColor? = nil
}