【发布时间】:2015-10-15 17:10:17
【问题描述】:
我在使用@IBDesignable 类时突然遇到一个奇怪且可重现的错误,@IBInspectable 属性给出以下警告:
Main.storyboard:警告:IB Designables:忽略“UIButton”实例上键路径“test”的用户定义运行时属性。尝试设置其值时遇到异常:[ setValue:forUndefinedKey:]:此类不符合键测试的键值编码。
需要明确的是,这个警告只是 Xcode 中的一个问题,它封装得很好。还是很烦!
复制步骤
- 创建新项目
-
使用@IBInspectable String 属性创建自定义@IBDesignable UIButton 子类:
import UIKit @IBDesignable class TempButton: UIButton { @IBInspectable var test:String = "" }- 将 Button 拖到情节提要中的 View Controller,并在 Identity Inspector 中为其提供自定义类“TempButton”。
- 现在“Test”属性应该出现在“Temp Button”属性的 Attributes Inspector 中 - 在此字段中输入任何内容。
- 砰!出现上述警告。从字段中删除文本,警告就会消失。
我尝试了几种解决方案 - 不同的变量名称,使“测试”属性成为可选,使用初始化器,到目前为止没有运气。
这是问题的屏幕截图:
【问题讨论】:
-
非常有趣,我无法重现该问题。我完全按照你说的做了。没有警告。你使用的是什么版本的 Xcode?您还记得先构建应用程序吗?您是否尝试过重启计算机(有助于在 Xcode 的一侧敲击头部)?
-
我已经在 Xcode 的头部侧面拍了一下(即重新启动!),我在当前版本的 Xcode (7.0.1) 和 beta (7.1 beta 3) 上都试过了,没运气。感谢您调查它,有趣的是它没有发生在您身上。
-
已添加屏幕截图以帮助诊断问题(如果其他人无法复制)。
-
良好的屏幕截图。我在我们的体验中看到了一个重要的区别:在您将按钮拖入并更改其类之后,您的 Designables 会显示“正在更新”,但我的会显示“最新”。当然,这是关键的区别。 - 你做了通常的“吹走缓存”吗?
-
嗨@amergin,最后我不得不放弃使用 IBInspectable,这是一个很大的痛苦。我以为我是唯一一个像你说的那样忍受这种令人沮丧的 Xcode 特质的人。我仔细阅读了 matt 清除缓存等的所有建议,但没有任何帮助。
标签: swift storyboard ibdesignable ibinspectable