1

我有一项任务需要计算日志文件中错误的发生次数,并且我知道该怎么做。现在我试图改变这些事件的字体颜色。我让它有点工作,但它不会将整个单词更改为想要的颜色,并且对于该字符串的下一次出现,它会移动超过 3 个字符。见下图。

在此处输入图像描述

我搜索了“已检查”这个词,它给了我这些结果。

下面是我正在使用的代码

NSArray * lines = [words componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
    wordresult = [lines componentsJoinedByString:@""];





if (occS2 == 1)
    {
        NSString * box2 = [_occSearchTwoTextBox stringValue];
        NSUInteger countFatal = 0, length4 = [wordresult length];
        NSRange range4 = NSMakeRange(0, length4);
        while(range4.location != NSNotFound)
        {
            range4 = [wordresult rangeOfString: box2 options:NSCaseInsensitiveSearch range:range4];

            [self.stringLogTextView setTextColor:[NSColor redColor] range:range4];
            NSLog(@"Occurance Edited");

            if(range4.location != NSNotFound)
            {
                range4 = NSMakeRange(range4.location + range4.length, length4 - (range4.location + range4.length));
                countFatal++;
            }
        }
        NSString * FatalCount = [NSString stringWithFormat:@"%lu", (unsigned long)countFatal];
        [_customSearchTwoTextBox setStringValue:FatalCount];
    }

谁能指出我为什么要转移?我只能假设它与我的范围有关,但我不确定如何解决。

感谢大家的时间!

4

1 回答 1

0

我不确定为什么您的方法无法正常工作,但我会以不同的方式进行。使用 enumerateSubstringsInRange:options:usingBlock:,您可以逐字枚举您的字符串,并为您获取传入方法的每个单词的范围。如果单词是“已检查”,您可以增加计数并为可变属性字符串的该范围设置属性。这是如何使用该方法的示例,

    NSString *theText = @"] Tables initialized\n]Database version Checked\n]Got login id-1\n] Tables initialized\n]Database version Checked\n]Got login id-1\n] Tables initialized\n]Database version Checked\n]Got login id-1\n";
    NSMutableAttributedString *attrib = [[NSMutableAttributedString alloc] initWithString:theText];
    NSDictionary *dict = @{NSForegroundColorAttributeName:[NSColor greenColor]};

    __block int count = 0;
    [theText enumerateSubstringsInRange:NSMakeRange(0, theText.length) options:NSStringEnumerationByWords usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
        if ([substring isEqualToString:@"Checked"]) {
            [attrib setAttributes:dict range:substringRange];
            count ++;
        };
    }];

    self.textView.textStorage.attributedString = attrib;
    NSLog(@"count is: %d",count);

在此处输入图像描述

于 2014-10-31T04:09:12.757 回答