调用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
相关产品推荐
相关产品推荐

