此类不符合 @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】:
您不能将@IBInspectable
s 的基元定义为可为空。
当您尝试这样做并为这些属性之一设置值时,您将在 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 的键值编码的主要内容,如果未能解决你的问题,请参考以下文章
对于使用 RestKit v0.20.0 的键 Text,此类不符合键值编码