设置属性文字,NSRangeException错误

尝试通过select设置我的UIText视图的归因文本属性。 几乎工作。 采取以下红色字体颜色设置文字的动作。 这有时会起作用,但经常会出现错误:

终止应用程序,由于未捕获的exception“NSRangeException”,原因:“NSMutableRLEArray objectAtIndex:effectiveRange ::越界”

即使在文本视图中看起来比选定范围所显示的字符多得多,也会发生这种情况。

- (IBAction)setText:(id)sender { NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithAttributedString:myTextView.attributedText]; [string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(p1,p2)]; myTextView.attributedText = string; } 

p1和p2是所选文本的开始和结束。 它们是用下面的代码生成的,它看起来像预期的那样工作:

 - (void)textViewDidChangeSelection:(UITextView *)textView { UITextRange *selectedRange = [myTextView selectedTextRange]; p1 = [myTextView offsetFromPosition:myTextView.beginningOfDocument toPosition:[selectedRange start]]; p2 = [myTextView offsetFromPosition:myTextView.beginningOfDocument toPosition:[selectedRange end]]; } 

编辑:我读了@ borrrden的评论后,解决了这个问题。 而不是NSMakeRange(p1,p2)]我正在使用NSMakeRange(p1,p2-p1)]

你需要小心NSMakeRange 。 我以前用同样的答案回答了另外一个问题,但是,当您尝试使用它时,它将采用起始值和长度值,而不是开始值和结束值。