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

God*_*her 11 ios swift

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

@IBDesignable class ExclusiveSelectorView: UIView {
    @IBInspectable var cellWidth: CGFloat?
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

这是我的课 在此输入图像描述

Sen*_*ful 9

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

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

@IBDesignable类TestDesignable IB Designables:在"TestDesignable"实例上忽略关键路径"testInt"的用户定义的运行时属性.尝试设置其值时遇到异常:[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
}
Run Code Online (Sandbox Code Playgroud)

有效:

@IBDesignable class TestDesignable: UIView {
  @IBInspectable var testInt: Int = 0
  @IBInspectable var testFloat: CGFloat = 0
  @IBInspectable var testPoint: CGPoint = .zero
  @IBInspectable var testColor: UIColor? = nil
}
Run Code Online (Sandbox Code Playgroud)

  • @Santiagocarmonagonzález人们通常将"价值类型"表示为原语.`UIColor`是一个引用类型,它可以是`nil`.简而言之,在Obj-C中必须能够表示可设计,在Obj-C中,只有参考类型可以是"nil". (2认同)
  • 我会给你1亿点积分让我这个超级直率.自从迅速问世以来,我在几乎每一个项目中都遇到过这个"虫子".谢谢! (2认同)