Приложение аварийно завершает работу при вызове добавления в подкласс NSMutableAttributedString

У меня есть следующий фрагмент кода, в котором я унаследовал класс от NSMutableAttributedString, и когда я вызываю метод добавления в методе моего класса, приложение аварийно завершает работу. Я просто хочу узнать причину. Может кто-нибудь помочь мне?

 class Str: NSMutableAttributedString {

 override init() {
    super.init()
 }

 required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
 }

 func getStr(s:String) {
    self.append(NSMutableAttributedString.init(string: s))
    print(self)
 }

}

Сообщение об ошибке:

Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «*** -строка определена только для абстрактного класса. Определить -[string.str string]!'


person Usama Azam    schedule 07.12.2018    source источник
comment
Всегда полезно включить сообщение об ошибке, которое вы получаете при сбое приложения.   -  person James P    schedule 07.12.2018
comment
Привет, Усама. Как уже сказал Джеймс, постарайтесь включить как можно больше информации, например, об ошибке, которую вы получаете. Для получения дополнительной информации о том, как получить наилучшие результаты, задавая «хорошие» вопросы, посетите stackoverflow.com/help/how-to-ask.   -  person ophychius    schedule 07.12.2018
comment
сообщение об ошибке в консоли: *** Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «*** -строка определена только для абстрактного класса. Определить -[string.str string]!'   -  person Usama Azam    schedule 07.12.2018
comment
NSMutableAttributedString является кластером классов, поэтому не может быть подклассом. stackoverflow .com/questions/8360992/   -  person James P    schedule 07.12.2018
comment
Спасибо @JamesP за эту информацию.   -  person Usama Azam    schedule 07.12.2018
comment
Разве вы не можете использовать расширение вместо этого? Потому что, как указано в ссылке, предоставленной @JamesP, не рекомендуется создавать подклассы (я помню, что раньше в документе было предупреждение, но больше нет, память меня обманывает?). Есть много способов переопределить, чтобы заставить его работать.   -  person Larme    schedule 08.12.2018
comment
да @Larme ваша точка зрения выглядит справедливой, спасибо за рекомендацию.   -  person Usama Azam    schedule 10.12.2018


Ответы (1)


попробуйте этот код, чтобы добавить строку в атрибутированную строку, я надеюсь, что это поможет вам.

func getStr(_ newstr:String, attrib:[NSAttributedString.Key: Any]) {
    let newText = NSMutableAttributedString(string: newstr, attributes: attrib)
    self.append(newText)
    print(self)
 }

вы должны передать newstr и attrib, как показано ниже.

let newstr: newstr = "your text here"
let attrib: [NSAttributedString.Key: Any] = [.foregroundColor: UIColor.black, .font: UIFont.systemFont(ofSize: 15)]
person AtulParmar    schedule 07.12.2018
comment
Этот код тоже не работает. @JamesP был проинформирован о проблеме в комментарии выше. - person Usama Azam; 07.12.2018