Le code suivant a été parfaitement travaillé avec l'ancien Swift. Ceci est une extension de 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
}
Mais dans Swift 3 il se bloque en disant
*** Arrêt de l'application en raison d'une exception non interceptée 'NSInvalidArgumentException', raison: '- [_ SwiftValue unsignedIntegerValue]: sélecteur non reconnu envoyé à l'instance 0x6080002565f0'
Quelqu'un peut-il me suggérer ce que je dois faire?
J'ai rencontré le même problème:
let attributedOptions : [String: AnyObject] = [
NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType as AnyObject,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8 as AnyObject
]
Ici, le String.Encoding.utf8
La vérification de type échoue. Utilisez NSNumber(value: String.Encoding.utf8.rawValue)
Dans Swift3, aucune conversion en AnyObject n'est plus nécessaire et également aucun NSNumber.
let attrs: [String: Any] = [
NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue
]
Ce message m'a sauvé la journée. Après la migration vers Swift 3, le petit changement String.Encoding.utf8
à String.Encoding.utf8.rawValue
a corrigé le piège signalé ici.
Ligne d'origine:
...
options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8],
...
changé en
options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue],
ajouter le .rawValue
jusqu'à la fin...