web-dev-qa-db-ja.com

Swift-3エラー: '-[_ SwiftValue unsignedIntegerValue]:認識されないセレクター

次のコードは、古いSwiftで完全に機能しました。これは文字列の拡張です

func stringByConvertingHTML() -> String {
    let newString = replacingOccurrences(of: "\n", with: "<br>")
    if let encodedData = newString.data(using: String.Encoding.utf8) {
        let attributedOptions : [String: AnyObject] = [
            NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType as AnyObject,
            NSCharacterEncodingDocumentAttribute: String.Encoding.utf8 as AnyObject
        ]
        do {
            let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) //Crash here
            return attributedString.string
        } catch {
            return self
        }
    }
    return self
}

しかしSwift 3では、

***キャッチされない例外 'NSInvalidArgumentException'によるアプリの終了、理由: '-[_ SwiftValue unsignedIntegerValue]:認識されないセレクターがインスタンス0x6080002565f0に送信されました

誰が何をする必要があるのか​​教えてください?

51
Tapas Pal

私は同じ問題に遭遇しました:

_let attributedOptions : [String: AnyObject] = [
            NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType as AnyObject,
            NSCharacterEncodingDocumentAttribute: String.Encoding.utf8 as AnyObject
        ]
_

ここで_String.Encoding.utf8_型チェックは失敗します。 NSNumber(value: String.Encoding.utf8.rawValue)を使用します

88
Sachin Vas

Swift3では、AnyObjectへのキャストはもう必要なく、NSNumberも必要ありません。

let attrs: [String: Any] = [
            NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType,
            NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue
        ]
47
zidanex

この投稿は私の一日を救った。 Swift 3)に移行した後、String.Encoding.utf8からString.Encoding.utf8.rawValueへの小さな変更により、ここで報告されたトラップが修正されました。

元の行:

...
    options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,
              NSCharacterEncodingDocumentAttribute: String.Encoding.utf8],
...

変更後

options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,
          NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue],

最後に.rawValueを追加...

8