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

Cra*_*itt 9 storyboard swift ibdesignable ibinspectable

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

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

要明确这个警告只是Xcode中的一个问题,它打包很好.仍然很烦人!

重现步骤

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

    import UIKit
    
    @IBDesignable
    class TempButton: UIButton {
        @IBInspectable var test:String = ""
    }
    
    Run Code Online (Sandbox Code Playgroud)
    1. 将一个Button拖到故事板中的View Controller,并在Identity Inspector中为其提供自定义类"TempButton".
    2. 现在,"测试"属性应出现在"临时按钮"属性的"属性"检查器中 - 在此字段中键入任何内容.
    3. 巴姆!出现上述警告.从字段中删除文本,警告消失.

我尝试了几个解决方案 - 不同的变量名称,使'test'属性成为可选,使用初始化程序,到目前为止没有运气.

以下是问题的截屏:

在此输入图像描述

Mik*_*Dev 9

我通过确保Interface Builder"build"没有任何错误来解决这个问题.这意味着什么:

  1. 在Xcode的左侧面板中,转到Report Navigator(顶部的最后一个标签项).
  2. 在Reporst列表中,在目标之后,您应该看到"Interface Builder".展开该项目.
  3. 确保没有任何项目有错误(由红色X指定).
  4. 如果您在此处发现错误,请选择该错误,您将看到问题的更多详细信息.修复该问题,清理并重建.

请注意,该问题可能您正在使用的文件无关.看来,如果Interface Builder Build在构建相关文件之前失败,您将看到这些非常神秘的警告.

(我的原因最终成为不正确引用AppIcon和SplashScreen资产目录的共享扩展目标.)

  • 关闭Xcode.清除DerivedData文件夹"/Users/..../Library/Developer/Xcode/DerivedData"并重新构建. (6认同)

Zak*_*ram 8

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