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?
This post saved my day. After migrating to Swift 3, the little change
String.Encoding.utf8
toString.Encoding.utf8.rawValue
fixed the trap reported here.Orignal line:
changed to
add the
.rawValue
to the end...In Swift3 no cast to AnyObject is needed anymore and also no NSNumber.
I ran into the same problem:
Here the
String.Encoding.utf8
the type check fails. UseNSNumber(value: String.Encoding.utf8.rawValue)