【问题标题】:@IBDesignable - @IBInspectable, class not key value coding-compliant@IBDesignable - @IBInspectable,类不符合键值编码
【发布时间】:2015-10-15 17:10:17
【问题描述】:

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

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

需要明确的是,这个警告只是 Xcode 中的一个问题,它封装得很好。还是很烦!

复制步骤

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

    import UIKit
    
    @IBDesignable
    class TempButton: UIButton {
        @IBInspectable var test:String = ""
    }
    
    1. 将 Button 拖到情节提要中的 View Controller,并在 Identity Inspector 中为其提供自定义类“TempButton”。
    2. 现在“Test”属性应该出现在“Temp Button”属性的 Attributes Inspector 中 - 在此字段中输入任何内容。
    3. 砰!出现上述警告。从字段中删除文本,警告就会消失。

我尝试了几种解决方案 - 不同的变量名称,使“测试”属性成为可选,使用初始化器,到目前为止没有运气。

这是问题的屏幕截图:

【问题讨论】:

  • 非常有趣,我无法重现该问题。我完全按照你说的做了。没有警告。你使用的是什么版本的 Xcode?您还记得先构建应用程序吗?您是否尝试过重启计算机(有助于在 Xcode 的一侧敲击头部)?
  • 我已经在 Xcode 的头部侧面拍了一下(即重新启动!),我在当前版本的 Xcode (7.0.1) 和 beta (7.1 beta 3) 上都试过了,没运气。感谢您调查它,有趣的是它没有发生在您身上。
  • 已添加屏幕截图以帮助诊断问题(如果其他人无法复制)。
  • 良好的屏幕截图。我在我们的体验中看到了一个重要的区别:在您将按钮拖入并更改其类之后,您的 Designables 会显示“正在更新”,但我的会显示“最新”。当然,这是关键的区别。 - 你做了通常的“吹走缓存”吗?
  • 嗨@amergin,最后我不得不放弃使用 IBInspectable,这是一个很大的痛苦。我以为我是唯一一个像你说的那样忍受这种令人沮丧的 Xcode 特质的人。我仔细阅读了 matt 清除缓存等的所有建议,但没有任何帮助。

标签: swift storyboard ibdesignable ibinspectable


【解决方案1】:

我通过确保 Interface Builder“构建”没有任何错误来解决此问题。这是什么意思:

  1. 在 Xcode 的左侧面板中,转到 Report Navigator(顶部的最后一个选项卡项。)
  2. 在报告列表中,在您的目标之后,您应该会看到“界面生成器”。展开该项目。
  3. 确保所有项目都没有错误(如红色 X 所示)。
  4. 如果您在此处发现错误,请选择它,您将看到问题的更多详细信息。修复该问题,清理并重建。

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

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

【讨论】:

  • 啊!这意味着我必须将 @available 插入到特定于 iOS9+ 的类中......并处理旧版本。为了正确加载 Storyboard 需要做很多工作。 WTH。
  • 关闭 Xcode。清除 DerivedData 文件夹“/Users/..../Library/Developer/Xcode/DerivedData”并重新构建。
【解决方案2】:

我遇到了同样的问题,我解决了。 当您打开故事板时: 一键点击上方菜单中的编辑器。 2 单击刷新所有视图。 3-重新启动您的应用程序。 4-构建。

【讨论】:

  • 这在 8.2.1 上也对我有用。我突然想到我最近离线工作时关闭了自动刷新视图以节省电池,所以问题可能来自于此并且最近没有刷新视图。
【解决方案3】:

我遇到了类似的问题,但在上面的答案中没有找到解决方案。 在我的情况下,身份检查器中错误地添加了一个额外的 keyPath:

【讨论】:

  • 我花了两天时间“学习”如何使用过时的 Apple 在线文档使用 xib 构建自定义视图。在这种“棘手”的方式上,我收集了很多试用版(也有属性重命名),似乎其中一些会像你提到的那样在不同的地方添加键值属性。擦除所有错误项目后 - 主题消息消失。谢谢。
【解决方案4】:

为了你好,我希望你不要像我一样愚蠢,但我只是花了 2 个小时寻找解决方案。在我的情况下,我有一个属性定义为指向 BOOL 的指针......奇怪的是它给了我同样的错误。

我不得不改变:

@property (nonatomic) IBInspectable BOOL *randomProp;

到:

@property (nonatomic) IBInspectable BOOL randomProp;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 2013-12-03
    • 2011-04-15
    相关资源
    最近更新 更多