2

선택을 통해 내 UIText보기의 속성있는 텍스트 속성을 설정하려고합니다. 거의 작동합니다. 아래의 빨간색 글꼴 색상으로 텍스트를 설정하는 작업입니다. 가끔씩 작동하지만 종종 오류가 발생합니다.attributedText, NSRangeException 오류 설정

Terminating app due to uncaught exception 'NSRangeException', reason: 'NSMutableRLEArray objectAtIndex:effectiveRange:: Out of bounds'

텍스트보기에 선택한 문자 수보다 많은 문자가있는 경우에도 이런 현상이 발생합니다.

- (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)]을 사용하고 있습니다.

+0

오류를 재현하지 못했습니다. 그것이 발생하는 상황을 좁힐 수 있습니까? – Matthias

+0

왜'selectedTextRange'를 사용하고 있습니까? 그것은'selectedRange'가 훨씬 더 쉬울 것 같습니다. – borrrden

+0

에 관계없이, NSMakeRange는 start와 ** length의 매개 변수를 취합니다 ** 시작과 끝은 아닙니다. – borrrden

답변

7

NSMakeRange에주의해야합니다. 이전에 같은 대답으로 다른 질문에 대답했지만 시작 값과 길이가 인 값으로 시작 값과 끝 값이 아닙니다.