nsmutableerLarray objectatIndex:CeffectiveIveRange ::超出界限错误

我试图根据中断行字符将属性添加到TextView中的某个字符范围内。应用程序正在崩溃并抛出绑定错误。如果我申请属性的范围,则为为什么文本长度。

获得范围的方法:

    func findParagraphBy(postion:Int)->NSRange{
    var startIndex = 0
    var endIndex = 0
    
           
    for (index,char) in textView.text.enumerated(){
        if index<postion && char == "\n"{
            startIndex = index
        }else if index>=postion && char == "\n"  && endIndex == 0{
            endIndex = index
            
        }else{
            continue
        }
    }
    if endIndex == 0{
        endIndex = self.textView.text.count-1
    }

    let range = NSMakeRange(startIndex, endIndex)
    
    return range
}

应用属性的方法

 func applyAttr(){
    let range = findParagraphBy(postion: textView.selectedRange.location-1)     
    self.textView.textStorage.addAttributes(self.currentAttribute.getAttr(), range: range)
    
    
}
You are looking for previous and next \n右边的位置,并从中制作一个范围,对吧?范围(以下:选项:范围:)可能是一种更简单的方法,给出0到位置的范围,并且位置到Max ...否则您可能想要调试:打印每个变量的值,看看它是否似乎正确才能找到问题...例如,如果您的字符串为空,则endIndex码是-1?和一个nsrange,它开始索引 - 长度,而不是开始索引 - 结束索引......这是我猜测的主要罪魁祸首......Larme
@ leare它的工作范围(以下:选项:范围:)。谢谢:)Newuser

回答 0