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

iOS13以下版本UIView子类ContentListView无法正常类型转换问题

问题根因

iOS 11、12 版本的 Objective-C runtime 对 Swift 自定义类的识别存在兼容性缺陷:当 Swift 自定义类没有显式暴露给 Objective-C runtime 时,Interface Builder 在解析类绑定时无法正确匹配 Swift 类,会默认生成基类 UIView 实例;而 iOS 13 及以上版本优化了该识别逻辑,因此高版本系统运行正常。你看到的 Unknown class _TtCxxxx 报错就是典型的 runtime 找不到 Swift 重整后的类名的表现。

解决方案

按以下步骤操作即可解决:

  • 给 ContentListView 类添加 @objc 标记,显式将类暴露给 Objective-C runtime,代码修改如下:
import UIKit
import RxSwift
import RxRelay
import RxCocoa
import SwinjectStoryboard

// 新增下面这行@objc标记,指定类名
@objc(ContentListView)
class ContentListView: UIView {
    // 原有类内代码不需要修改
}
  • 打开 Storyboard,选中所有绑定了 ContentListView 类型的视图,打开右侧「Identity Inspector」面板,确认「Class」输入框内容为 ContentListView,「Module」选项取消勾选「Inherit From Target」,手动选择项目的主 Module(即你的 App 名称 Kolibree)。
  • 清理 Xcode 缓存后重新编译:
    1. 按快捷键 Command + Shift + K 清理现有构建产物
    2. 关闭 Xcode,删除 ~/Library/Developer/Xcode/DerivedData 目录下对应项目的缓存文件夹
    3. 重新打开 Xcode 执行编译运行即可
验证方法

可在 ContentListView 的 required init?(coder: NSCoder) 方法中添加断点,iOS 11/12 下运行如果能触发该断点,说明类绑定已经生效,崩溃问题解决。

内容的提问来源于stack exchange,提问作者Bawenang Rukmoko Pardian Putra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:24:06