You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode 13.4.1用户定义运行时属性字符串"0"被存为空的问题

Xcode13.4.1 自定义Runtime属性字符串"0"被解析为空的问题

问题现象

升级至Xcode13.4.1后,自定义视图中定义了如下@IBInspectable属性:

@IBInspectable
open var numberString = "2" {
    didSet {
        label.text = numberString
    }
}

当在Xib的User Defined Runtime Attributes中给该属性设置字符串类型的"0"时,numberString会被解析为空字符串,但查看Xib的XML源码,配置本身是正确的:

<userDefinedRuntimeAttributes>
    <userDefinedRuntimeAttribute type="string" keyPath="numberString" value="0"/>
</userDefinedRuntimeAttributes>

特殊触发修复的场景:如果添加其他无关属性,或者重复定义该属性两次,问题会自动消失:

<userDefinedRuntimeAttributes>
    <userDefinedRuntimeAttribute type="string" keyPath="numberString" value="0"/>
    <userDefinedRuntimeAttribute type="string" keyPath="numberString" value="0"/>
</userDefinedRuntimeAttributes>

该问题仅在Xcode13.4.1的Xib项目中出现,旧版Xcode及新创建的Storyboard项目无此异常。

临时解决方案

  1. 重复配置属性:在Xib的User Defined Runtime Attributes中重复添加两次相同的numberString属性并设置为"0",Runtime会正确解析为"0"。
  2. 添加冗余占位属性:在配置列表中新增一个无关的字符串类型属性(比如命名为dummyAttr),无需在代码中实现该属性,仅作为占位即可让原numberString的"0"正常解析。
  3. 代码兜底兼容:在属性的didSet方法中添加空值判断,确保异常场景下显示正确值:
@IBInspectable
open var numberString = "2" {
    didSet {
        label.text = numberString.isEmpty ? "0" : numberString
    }
}

原因分析

这是Xcode13.4.1针对Xib文件中**单独的字符串类型Runtime属性值"0"**存在的解析Bug,推测是解析逻辑误将单独的"0"判定为空值或进行了错误的类型转换,而当配置列表中存在多个属性时,会触发正确的解析流程。

内容的提问来源于stack exchange,提问作者jab11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 00:15:41