Ответ 1
Ваша длина слишком длинная на WorldRange. NSMakeRange принимает два аргумента, начальную точку и длину, а не начальную точку и конечную точку. Вероятно, поэтому вы путаетесь в обеих проблемах.
Я пытаюсь добавить на ярлык какой-то причудливый текст, но у меня возникли проблемы с классом NSMutableAttributedString. Я пытался добиться четырех следующих: 1. Изменить шрифт, 2. Подчеркнуть диапазон, 3. Изменить цвет диапазона, 4. Верхний диапазон.
Этот код:
- (void)applicationDidFinishLaunching:(NSNotification*)aNotification
{
NSMutableAttributedString* display = [[NSMutableAttributedString alloc]
initWithString:@"Hello world!"];
NSUInteger length = [[display string]length] - 1;
NSRange wholeRange = NSMakeRange(0, length);
NSRange helloRange = NSMakeRange(0, 4);
NSRange worldRange = NSMakeRange(6, length);
NSFont* monoSpaced = [NSFont fontWithName:@"Menlo"
size:22.0];
[display addAttribute:NSFontAttributeName
value:monoSpaced
range:wholeRange];
[display addAttribute:NSUnderlineStyleAttributeName
value:[NSNumber numberWithInt:1]
range:helloRange];
[display addAttribute:NSForegroundColorAttributeName
value:[NSColor greenColor]
range:helloRange];
[display addAttribute:NSSuperscriptAttributeName
value:[NSNumber numberWithInt:1]
range:worldRange];
//@synthesize textLabel; is in this file.
[textLabel setAttributedStringValue:display];
}
Дает мне эту ошибку:
NSMutableRLEArray objectAtIndex:effectiveRange:: Out of bounds
Кроме того, я пытался возиться с диапазонами, но стал еще более запутанным, когда я попробовал NSRange worldRange = NSMakeRange(4, 5);
. Я не понимаю, почему это производит следующее: Hell^o wor^ld!
, где буквы внутри ^ s являются верхними строками.
NSRange worldRange = NSMakeRange(6, 6);
дает желаемый эффект, hello ^world!^
.
Как выглядит ярлык:
Ваша длина слишком длинная на WorldRange. NSMakeRange принимает два аргумента, начальную точку и длину, а не начальную точку и конечную точку. Вероятно, поэтому вы путаетесь в обеих проблемах.
NSRange
имеет два значения: начальный индекс и длину диапазона.
Итак, если вы начинаете с индекса 6 и переходите length
после того, как вы закончите конец строки, то вы хотите:
NSRange worldRange = NSMakeRange(6, length - 6);