NSRange Exception iOS

时间:2018-06-10 14:02:09

标签: ios swift nsattributedstring

这是我的代码: 我正在尝试格式化我的文本NSMutableAttributedString(),但它似乎总是超出范围。

  

由于未捕获的异常终止应用程序' NSRangeException',原因:' NSMutableRLEArray objectAtIndex:effectiveRange ::越界'

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 :(得分:0)

您对该范围的问题是由于您的属性字符串为空。你从来没有给它初始文本。

变化:

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
    }
}