如果运行下面的代码,则会导致异常
'NS无效参数异常',原因:'-[__NSCF类型集合]:发送到示例0x 283130 be 0 '的无法识别的选择器
但是,可以通过将positionRect
中的宽度值从100.0减小来删除该异常,例如,将其设置为类似50.0的值将删除该异常。
但是为什么会这样呢?为positionRect
指定的宽度值为100.0,这比imageSize
的宽度要短得多。即使存在一些大小问题,为什么会出现无法识别的选择器异常呢?
let imageSize = CGSize(width: 400, height: 100)
let testRenderer = UIGraphicsImageRenderer(size: imageSize)
let testImage = testRenderer.image { context in
context.cgContext.setFillColor(UIColor.black.cgColor)
context.fill(CGRect(origin: .zero, size: imageSize))
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .left
let attributes: [NSAttributedString.Key: Any] = [
.font: UIFont.systemFont(ofSize: 8.0),
.paragraphStyle: paragraphStyle,
.foregroundColor: UIColor.white.cgColor
]
let attributedString = NSAttributedString(string: "This is some text", attributes: attributes)
let positionRect = CGRect(x: 10, y: 10, width: 100.0, height: 8.0)
attributedString.draw(with: positionRect, options: .usesLineFragmentOrigin, context: nil)
}
1条答案
按热度按时间ltqd579y1#
出现此问题是因为在
attributes
字典中为.foregroundColor
键传递了CGColor
而不是UIColor
。documentation声明:在macOS中,此属性的值为NSColor示例。在iOS、tvOS、watchOS和Mac Catalyst中,此属性的值为UIColor示例。使用此属性可指定呈现期间文本的颜色。如果未指定此属性,文本将呈现为黑色。
NSAttributedString
代码正试图调用set
提供的颜色,如错误所示。这是在显示Objective-C语法-[__NSCFType set]
的错误消息中指出的。这表明set
正在__NSCFType
类型的对象上被调用,该类型是表示许多Core Foundation(和Core Graphics)类型的内部类型,如CGColor
。简而言之,更改行:
致: