【发布时间】:2023-03-13 22:02:02
【问题描述】:
我在 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 中的错误?
【问题讨论】: