【问题标题】:This class is not key value coding-compliant with @IBInspectable此类不符合 @IBInspectable 的键值编码
【发布时间】:2015-09-09 17:00:26
【问题描述】:

我在自定义视图上创建了一个@IBDesignable 来设置来自 IB 的属性。但是我得到这个类是不符合键值编码的,尽管我的类中有这个属性。

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

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

这是我的课

【问题讨论】:

  • 显示自定义类位的屏幕截图,是视图还是文件所有者?
  • 您可能需要为变量显式定义 setter 和 getter 方法,查看此站点 nshipster.com/ibinspectable-ibdesignable
  • 似乎如果我在没有设置器/获取器的情况下保留默认值也可以,所以我会保持这种方式!所以基本上@IBInspectable var cellWidth: CGFloat = 0 而不是可选的。
  • 也可以试试@IBInspectable var cellWidth: CGFloat!,但如果没坏就不要修了。

标签: ios swift


【解决方案1】:

您不能将@IBInspectables 的基元定义为可为空。

当您尝试这样做并为这些属性之一设置值时,您将在 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
}

有效:

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

【讨论】:

  • 为什么@IBInspectable var testColor: UIColor? = nil可以为nil?如果一开始你说:“你不能为@IBInspectables 定义原语为空。”
  • @Santiagocarmonagonzález 人们通常将“值类型”表示为原语。 UIColor 是引用类型,可以是nil。简而言之,可设计对象必须在 Obj-C 中可以表示,而在 Obj-C 中,只有引用类型可以是 nil
  • 我会给你 1 亿分,因为这对我来说太直率了。自从swift问世以来,我几乎在我从事的每个项目中都遇到了这个“错误”。谢谢!
  • 即使在初始化原始类型之后,我也会收到 IBDesignable time 警告。
猜你喜欢
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多