Swift-3 error: '-[_SwiftValue unsignedIntegerValue]: unrecognized selector

IosXcodeExceptionSwift3

Ios Problem Overview


Following code was perfectly worked with old swift. This is an extension of String

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
}

But in swift 3 it crashes saying

> *** Terminating app due to uncaught exception > 'NSInvalidArgumentException', reason: '-[_SwiftValue > unsignedIntegerValue]: unrecognized selector sent to instance > 0x6080002565f0'

Anyone please suggest me what need to do?

Ios Solutions


Solution 1 - Ios

I ran into the same problem:

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

Here the String.Encoding.utf8 the type check fails. Use NSNumber(value: String.Encoding.utf8.rawValue)

Solution 2 - Ios

In Swift3 no cast to AnyObject is needed anymore and also no NSNumber.

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

Solution 3 - Ios

This post saved my day. After migrating to Swift 3, the little change String.Encoding.utf8 to String.Encoding.utf8.rawValue fixed the trap reported here.

Orignal line:

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

changed to

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

add the .rawValue to the end...

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTapas PalView Question on Stackoverflow
Solution 1 - IosSachin VasView Answer on Stackoverflow
Solution 2 - IoszidanexView Answer on Stackoverflow
Solution 3 - IosPeter KuennemannView Answer on Stackoverflow