Я новичок в программировании Cocoa под OSX Lion, так что это вопрос, на который я не могу найти ответ. Мне нужно изменить атрибутивную строку, введенную пользователем через NSTextView
. Редактирование может включать замену части (частей) строки внутри NSTextStorage
и добавление объектов NSTextAttachment
. Я выполнил протокол и предоставил его для экземпляра NSTextView
в качестве делегата. Я также реализован метод textView:shouldChangeTextInRanges:replacementStrings:
в следующем порядке:textView: shouldChangeTextInRanges: replacementStrings: метод выходит из строя при редактировании NSTextStorage
- (BOOL)textView:(NSTextView *)textView shouldChangeTextInRanges:(NSArray *)affectedRanges replacementStrings:(NSArray *)replacementStrings{
NSTextStorage* ts=[textView textStorage];
[ts beginEditing];
NSMutableString* buf=[ts mutableString];
//make some completions
NSRange rng;
rng.location=0;
rng.length=[buf length];
[buf replaceOccurrencesOfString:@"(." withString:@"(0." options:0 range:rng];
rng.location=0;
rng.length=[buf length];
[buf replaceOccurrencesOfString:@"-+" withString:@"-" options:0 range:rng];
rng.location=0;
rng.length=[buf length];
[buf replaceOccurrencesOfString:@"+-" withString:@"-" options:0 range:rng];
[ts endEditing];
return YES;
}
Таким образом, я пытаюсь следующий сценарий: когда приложение вверх, пользователь печатает внутри NSTextView
текст. Если он тип «(» все идет хорошо, но когда он тип «- +» (минус, плюс, пробела) - метод происшествий производства этого дампа:.
[NSConcreteTextStorage attributesAtIndex:effectiveRange:]: Range or index out of bounds
(
0 CoreFoundation 0x00007fff95963286 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff8c32bd5e objc_exception_throw + 43
2 CoreFoundation 0x00007fff959630ba +[NSException raise:format:arguments:] + 106
3 CoreFoundation 0x00007fff95963044 +[NSException raise:format:] + 116
4 AppKit 0x00007fff90acb5bd -[NSConcreteTextStorage attributesAtIndex:effectiveRange:] + 121
5 AppKit 0x00007fff90f4cde6 -[NSTextView insertText:replacementRange:] + 840
6 AppKit 0x00007fff910fc891 -[NSTextInputContext handleTSMEvent:] + 2289
7 AppKit 0x00007fff910fe4fe _NSTSMEventHandler + 165
8 HIToolbox 0x00007fff89745308 _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec + 1263
9 HIToolbox 0x00007fff89744914 _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec + 446
10 HIToolbox 0x00007fff8975b6c7 SendEventToEventTarget + 76
11 HIToolbox 0x00007fff89930a4d SendTSMEvent + 35
12 HIToolbox 0x00007fff89930dd4 SendUnicodeTextAEToUnicodeDoc + 452
13 HIToolbox 0x00007fff8993095e TSMKeyEvent + 629
14 HIToolbox 0x00007fff8976f81a TSMProcessRawKeyEvent + 2350
15 AppKit 0x00007fff910fbade -[NSTextInputContext handleEvent:] + 639
16 AppKit 0x00007fff90fc7eaf -[NSView interpretKeyEvents:] + 248
17 AppKit 0x00007fff90f40c65 -[NSTextView keyDown:] + 691
18 AppKit 0x00007fff90a20544 -[NSWindow sendEvent:] + 7430
19 AppKit 0x00007fff909b868f -[NSApplication sendEvent:] + 5593
20 AppKit 0x00007fff9094e682 -[NSApplication run] + 555
21 AppKit 0x00007fff90bcd80c NSApplicationMain + 867
22 myapp 0x0000000100001302 main + 34
23 myapp 0x00000001000012d4 start + 52
кажется, что укороченная строка вызывает некоторый аут -of-границы разлива.
что я делаю неправильно и как я могу решить эту проблему? Пожалуйста, помогите.
Как-то у меня также возникают проблемы с такой проблемой: я пытаюсь добавить атрибуты асинхронно, но она вызывает ту же ошибку. Мне действительно интересно, откуда эта ошибка. – Paul