web-dev-qa-db-ja.com

Swift 4.2:[Swift._EmptyArrayStorage _getValue:forType:]:認識されないセレクタ

プロジェクトを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
_
11
ricardopereira

私はコードのどこが間違っているのかを見つけました。

したがって、コンパイラエラー「 'none'は使用できません:[]を使用して空のオプションセットを作成します」のため、_NSUnderlineStyle.none.rawValue_ with _[]_ ???? ‍♂️また、タイプrawValueではなく、noneを使用していたため、これは正しくありません。

したがって、修正は_0_を使用しています。

間違った: mutableAttributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: [], range: range)

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

36
ricardopereira