Ошибка Swift-3: '- [_ SwiftValue unsignedIntegerValue]: непризнанный селектор
Следующий код отлично работал со старым быстрым. Это расширение строки
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
}
Но в быстрой 3 он падает, говоря
*** Завершение приложения из-за неперехваченного исключения 'NSInvalidArgumentException', причина: '- [_ SwiftValue unsignedIntegerValue]: непризнанный селектор, отправленный в экземпляр 0x6080002565f0
Кто-нибудь, пожалуйста, предложите мне, что нужно делать?
Ответы
Ответ 1
Я столкнулся с той же проблемой:
let attributedOptions : [String: AnyObject] = [
NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType as AnyObject,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8 as AnyObject
]
Здесь String.Encoding.utf8
проверка типа не выполняется. Используйте NSNumber(value: String.Encoding.utf8.rawValue)
Ответ 2
В Swift3 больше не требуется применять к AnyObject, а также нет NSNumber.
let attrs: [String: Any] = [
NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue
]
Ответ 3
Этот пост спас мой день. После миграции на Swift 3 небольшое изменение String.Encoding.utf8
до String.Encoding.utf8.rawValue
зафиксировало ловушку, указанную здесь.
Ориг. линия:
...
options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8],
...
изменено на
options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue],