Ios 设置AttributeText,NSRangeException错误

Ios 设置AttributeText,NSRangeException错误,ios,uitextview,nsattributedstring,nsrange,nsrangeexception,Ios,Uitextview,Nsattributedstring,Nsrange,Nsrangeexception,试图通过选择设置我的UIText视图的属性化文本属性。几乎奏效了。设置以下红色字体颜色的文本的操作。这有时有效,但通常会出现错误: 由于未捕获异常“NSRangeException”而终止应用程序,原因: 'NSMutablereArray objectAtIndex:effectiveRange::越界' 即使文本视图中的字符似乎比所选范围所指示的多,也会发生这种情况 - (IBAction)setText:(id)sender { NSMutableAttributedString

试图通过选择设置我的UIText视图的属性化文本属性。几乎奏效了。设置以下红色字体颜色的文本的操作。这有时有效,但通常会出现错误:

由于未捕获异常“NSRangeException”而终止应用程序,原因: 'NSMutablereArray 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]];

 }

编辑:我在阅读@borrden的评论后修复了问题。而不是
NSMakeRange(p1,p2)]
我使用的是
NSMakeRange(p1,p2-p1)]
你需要小心
NSMakeRange
。我以前用相同的答案回答过另一个问题,但它需要一个起始值和一个长度值,而不是一个起始值和一个结束值

我无法再现这个错误。你能缩小它正在发生的情况吗?为什么要使用
selectedtextange
?看来,
selectedRange
会更容易,不管怎样,
NSMakeRange
采用的参数是开始和长度,而不是开始和结束。@borrden谢谢,我打赌就是这样。我明天会再评论,如果这能解决问题。@Borrden就是这样,现在可以工作了。谢谢加上答案,我可以接受。