Как получить диапазон символов, которые видны из -textStorageDidProcessEditing :? - PullRequest
2 голосов
/ 13 января 2012

Для моей реализации подсветки синтаксиса я наблюдаю изменения в NSTextView, используя -[<NSTextStorageDelegate> textStorageDidProcessEditing:].

- (void)textStorageDidProcessEditing:(NSNotification *)notification {
  if (!self.languageGrammar) return;
  NSTextStorage *textStorage = self.textView.textStorage;
  NSRange glyphRange = [self.textView.layoutManager glyphRangeForBoundingRect:self.scrollView.documentVisibleRect
                                                              inTextContainer:self.textView.textContainer];
  NSRange editedRange = [self.textView.layoutManager characterRangeForGlyphRange:glyphRange actualGlyphRange:NULL];

  [textStorage removeAttribute:NSForegroundColorAttributeName range:editedRange];
  // crash is the line above ^^^^
  // color text ...
}

Я хочу получить диапазон видимых символов.Приведенный выше код работает до тех пор, пока я не нажму backspace , что приводит к сбою:

*** -[NSConcreteTextStorage attributesAtIndex:effectiveRange:]: Range or index out of bounds

Как получить диапазон видимых символов, чтобы я мог их покрасить?

1 Ответ

2 голосов
/ 17 января 2012

Проверьте, находится ли диапазон за пределами всей строки, и установлен ли диапазон, чтобы соответствовать границам строки:

NSRange range = NSRangeFromString(string);
...