У меня есть следующая строка в NSTextView:
Хорус отомстил за своего отца Осириса
Для этого есть два тега, Horus
и Osiris
,Я использую NSScanner, чтобы отсканировать строку для обоих тегов и выделить их желтым фоном, когда он найден.
Код:
for (Tag *aTag in tags) {
NSString *aTagName = [aTag name];
NSUInteger strLength = [aTagName length];
NSScanner *aScanner = [[NSScanner alloc] initWithString: aString];
[aScanner setCaseSensitive: YES];
[aScanner setScanLocation: 0];
BOOL result = [aScanner scanUpToString: aTagName intoString: nil];
while (![aScanner isAtEnd]) {
NSUInteger position = [aScanner scanLocation];
if (result) {
NSRange aRange = NSMakeRange(position, strLength);
[storage removeAttribute: NSBackgroundColorAttributeName range: aRange];
if (onOrOff) {
[storage addAttribute: NSBackgroundColorAttributeName value: aColor range: aRange];
}
position = position + [aTagName length];
[aScanner setScanLocation: position];
}
[aScanner scanUpToString: aTagName intoString: nil];
}
}
Это не удается, когда первый тег (в приведенном выше примереHorus
) находится в самом начале (местоположение = 0) отсканированной строки.Тег не найден, и код продолжает циклически повторяться.
Однако, когда я заменяю строку на:
Через 10 лет Гор отомстил за своего отца Осириса
... все это работает, и оба моих тега найдены (как и ожидалось) и приятно выделены.
Я что-то упустил или это ошибка в NSScanner?