Swift 4.2:[Swift._EmptyArrayStorage _getValue:forType:]:无法识别的选择器

时间:2018-09-19 14:56:26

标签: swift nsmutableattributedstring swift4.2

将项目升级到Swift 4.2(从4.0转换)后,我遇到NSInvalidArgumentException异常。

2018-09-19 15:37:33.253482+0100 <redacted>-beta[3715:1010421] -[Swift._EmptyArrayStorage _getValue:forType:]: unrecognized selector sent to instance 0x107e6c290
2018-09-19 15:37:33.254312+0100 <redacted>-beta[3715:1010421] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Swift._EmptyArrayStorage _getValue:forType:]: unrecognized selector sent to instance 0x107e6c290'

这与NSMutableAttributedString相关,并且代码中添加了一些属性,例如NSAttributedString.Key.underlineStyle

当将要分配的属性字符串:textView.attributedText = mutableAttributedString时发生异常。


更新:

因此,它正在Swift 4中工作: mutableAttributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.styleNone.rawValue, range: range)

然后,在Swift 4.2中,编译器建议将NSUnderlineStyle.styleNone.rawValue更改为NSUnderlineStyle.none.rawValue

之后,编译器开始大喊“ 'none'不可用:使用[]构造一个空选项集“:

mutableAttributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.none.rawValue, range: range)
                                                                                   ^~~~~ 'none' is unavailable: use [] to construct an empty option set

1 个答案:

答案 0 :(得分:31)

我刚刚发现代码中的错误。

因此,由于编译器错误“ 'none'不可用:使用[]构造空选项集“,我替换了 NSUnderlineStyle.none.rawValue [] 一起使用♂♂️这不是正确的情况,因为它使用的是rawValue,而不是类型none

因此,此修复程序正在使用 0

错误: mutableAttributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: [], range: range)

mutableAttributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: 0, range: range)