NSMutableAttributedStrings - objectAtIndex:effectiveRange:: Out of bounds
Ich versuche, fügen Sie einige fancy text auf einem Etikett, aber ich habe in einige Probleme laufen mit dem NSMutableAttributedString Klasse. Ich war das versuchen, zu erreichen, vier: 1. Ändern der schriftart, 2. Unterstrichen Reihe, 3. Änderung Bereich Farbe, 4. Hochgestellt Bereich.
Diesem code:
- (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];
}
Gibt mir diese Fehlermeldung:
NSMutableRLEArray objectAtIndex:effectiveRange:: Out of bounds
Auch, ich habe versucht, Herumspielen mit den Bereichen, aber wurde noch mehr verwirrt, als ich versuchte NSRange worldRange = NSMakeRange(4, 5);
. Ich verstehe nicht, warum das erzeugt dieses: Hell^o wor^ld!
, wo die Briefe im inneren des ^s, sind hoch.
NSRange worldRange = NSMakeRange(6, 6);
erzeugt die gewünschte Wirkung, hello ^world!^
.
Was das Etikett sieht wie folgt aus:
InformationsquelleAutor 425nesp | 2012-07-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Länge ist zu lang auf worldRange. NSMakeRange nimmt zwei Argumente, den start Punkt und die Länge, nicht der Startpunkt und der Endpunkt. Das ist wahrscheinlich, warum Sie immer verwirrt über beide Probleme.
InformationsquelleAutor borrrden
NSRange
hat zwei Werte, der start-index und die Länge des Bereichs.Wenn du also ab index 6 und gehen
length
Zeichen nach, dass Sie über das Ende des Strings, was Sie wollen, ist:InformationsquelleAutor Sherman Lo