@IBDesignable - @IBInspectable,类不符合键值编码

时间:2015-10-15 17:10:18

标签: swift storyboard ibdesignable ibinspectable

在使用@IBDesignable类时,我突然发现一个奇怪且可重现的错误,@ IBInspectable属性发出以下警告:

  

Main.storyboard:warning:IB Designables:忽略关键路径的用户定义的运行时属性" test"在" UIButton"的实例上。尝试设置其值时遇到异常:[setValue:forUndefinedKey:]:此类与密钥测试不符合密钥值编码。

要明确这个警告只是Xcode中的一个问题,它包装正常。仍然很烦人!

重现的步骤

  1. 创建新项目
  2. 使用@IBInspectable String属性创建自定义的@IBDesignable UIButton子类:

    import UIKit
    
    @IBDesignable
    class TempButton: UIButton {
        @IBInspectable var test:String = ""
    }
    
    1. 将一个按钮拖到故事板中的视图控制器,并为其提供自定义类" TempButton"在Identity Inspector中。
    2. 现在进行测试'属性应出现在“属性”检查器中,以显示“临时按钮”。 properties - 在此字段中输入任何内容。
    3. 的Bam!出现上述警告。从字段中删除文本,警告消失。
  3. 我尝试过多种解决方案 - 不同的变量名称,进行“测试”。 property an可选,使用初始化程序,到目前为止没有运气。

    以下是问题的截屏:

    enter image description here

4 个答案:

答案 0 :(得分:9)

我通过确保Interface Builder“build”没有任何错误来解决这个问题。这就是:

  1. 在Xcode的左侧面板中,转到报告导航器(顶部的最后一个标签项。)
  2. 在Reporst列表中,在目标之后,您应该看到“Interface Builder”。展开该项目。
  3. 确保没有任何项目有错误(由红色X指定)。
  4. 如果您在此处发现错误,请选择该错误,您将看到问题的更多详细信息。修复该问题,清理并重建。
  5. 请注意,如果对您正在使用的文件无关,则会出现问题。看来,如果Interface Builder Build在构建相关文件之前失败,您会看到这些非常神秘的警告

    (我的原因最终是错误地引用AppIcon和SplashScreen资产目录的共享扩展目标。)

答案 1 :(得分:8)

我面临同样的问题,我解决了它。 当你打开故事板时: 在上方菜单中单击编辑器。 双击刷新所有视图。 3 - 重启您的应用程序。 4-生成。

答案 2 :(得分:0)

我有一个类似的问题,但是我没有在上面的答案中找到解决方案。 就我而言,在身份检查器中错误地添加了另一个keyPath:

enter image description here

答案 3 :(得分:0)

为了您自己的利益,我希望您不会像我一样愚蠢,但我只花了2个小时来寻找解决方案。就我而言,我有一个定义为BOOL指针的属性...奇怪的是,它给了我同样的错误。

我不得不从:

@property (nonatomic) IBInspectable BOOL *randomProp;

收件人:

@property (nonatomic) IBInspectable BOOL randomProp;