NSRange Исключение iOS - PullRequest
0 голосов
/ 10 июня 2018

это мой код: я пытаюсь отформатировать мой текст NSMutableAttributedString (), но всегда кажется, что он выходит за пределы допустимого диапазона.

Завершение работы приложения из-за необработанного исключения «NSRangeException», причина:'NSMutableRLEArray objectAtIndex :ffectiveRange :: Out of bounds'

extension ImageTableViewCell  {
    func formatLabel(code: SectionItem) {

        print(code.statusType.title)
        let stringFormatted = NSMutableAttributedString()
        let range = (code.statusType.title as NSString).range(of: code.statusType.title)
        print(range); stringFormatted.addAttribute(NSAttributedStringKey.foregroundColor, value: code.statusType.color, range:range)

        stringFormatted.addAttribute(NSAttributedStringKey.underlineStyle, value: NSUnderlineStyle.styleSingle.rawValue, range:   range)

        self.titleLabel.attributedText = stringFormatted
    }
}

Не знаю, можно ли это исправить

Я пытался:

NSRange
NSMakeRange(loc: 0, mytext.count)

Что еще не хватает, пожалуйста?

1 Ответ

0 голосов
/ 10 июня 2018

Ваша проблема с диапазоном связана с тем, что указанная вами строка пуста.Вы никогда не давали ему исходный текст.

Измените:

let stringFormatted = NSMutableAttributedString()

на:

let stringFormatted = NSMutableAttributedString(string: code.statusType.title)

Тогда диапазон, который у вас есть, будет работать.Конечно, это странный способ вычисления диапазона всей строки.Просто сделайте:

let range = NSRange(location: 0, length: (code.statusType.title as NSString).length)

Но есть намного более простой способ создать строку атрибута, когда атрибуты должны быть применены ко всей строке:

extension ImageTableViewCell  {
    func formatLabel(code: SectionItem) {
        let attributes = [ NSAttributedStringKey.foregroundColor: code.statusType.color, NSAttributedStringKey.underlineStyle: NSUnderlineStyle.styleSingle.rawValue ]
        let stringFormatted = NSAttributedString(string: code.statusType.title, attributes: attributes)

        self.titleLabel.attributedText = stringFormatted
    }
}
...