【问题标题】:Setting attributedText, NSRangeException error设置属性文本,NSRangeException 错误
【发布时间】:2013-03-17 05:52:18
【问题描述】:

尝试通过选择设置我的 UIText 视图的属性文本属性。几乎可以工作。用下面的红色字体颜色设置文本的操作。这有时有效,但经常出错:

由于未捕获的异常“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)]

【问题讨论】:

  • 我无法重现该错误。你能缩小它发生的情况吗?
  • 你为什么使用selectedTextRange?看来selectedRange会容易得多
  • 不管怎样,NSMakeRange 采用 start 和 length 参数而不是 start 和 end。
  • @borrrden 谢谢,我打赌就是这样。如果解决了问题,我明天会再次发表评论。
  • @borrrden 就是这样,现在可以使用了。谢谢!添加答案,我可以接受。

标签: ios uitextview nsattributedstring nsrange nsrangeexception


【解决方案1】:

您需要小心NSMakeRange。我之前用相同的答案回答了另一个问题,但它需要一个起始值和一个 length 值,而不是你尝试使用它的起始值和结束值。

【讨论】:

    猜你喜欢
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多