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

Posted

技术标签:

【中文标题】此类不符合 @IBInspectable 的键值编码【英文标题】:This class is not key value coding-compliant with @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!,但如果没坏就不要修了。 【参考方案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 警告。

以上是关于此类不符合 @IBInspectable 的键值编码的主要内容,如果未能解决你的问题,请参考以下文章

此类不符合键的键值编码

iOS 此类不符合键标签的键值编码

对于使用 RestKit v0.20.0 的键 Text,此类不符合键值编码

Core Data 此类不符合键名的键值编码

NSUnknownKeyException setValue:forUndefinedKey:[重复]

由于未捕获的异常“NSUnknownKeyException”而终止应用程序此类不符合键 .img 的键值编码