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

调用NSAttributedString:draw()触发[__NSCFType set]未识别选择器异常求因

问题原因&修复方案

核心崩溃原因

你代码里的**foregroundColor属性值类型传错了**:NSAttributedString.Key.foregroundColor要求传入UIColor实例,但你写的是UIColor.white.cgColor(CGColor类型)。这种类型不匹配的问题,在不同的绘制逻辑分支下表现不同,才会出现调整width就“暂时正常”的假象。

为什么调整width能规避崩溃?

当positionRect的width缩小到50左右时,文本会被强制换行,此时系统文本绘制的内部逻辑走了另一条分支,暂时没触发对foregroundColor的错误类型调用;而width设为100时,文本能在一行显示,触发了需要正确解析foregroundColor的代码路径,此时错误传入的CGColor被当作UIColor对象处理,系统尝试向它发送set方法——但CGColor底层是__NSCFType类型,根本没有这个方法,直接引发崩溃。

修复代码

把foregroundColor的值改成UIColor.white即可彻底解决问题:

let attributes: [NSAttributedString.Key: Any] = [
    .font: UIFont.systemFont(ofSize: 8.0),
    .paragraphStyle: paragraphStyle,
    .foregroundColor: UIColor.white // 替换原有的UIColor.white.cgColor
]

额外提醒:当前positionRect的height设为8.0,和字体大小一致,如果文本换行的话会被截断,建议适当调高height值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:30:44