NSMutableAttributedString Absturz auf änderung der schriftart?
Ich bin sicher, veränderlich bedeutet, es kann geändert werden, also warum ist das passiert?
attrString = [[NSMutableAttributedString alloc] initWithString:@"Tip 1: Aisle Management The most obvious step – although one that still has not been taken by a disconcerting number of organisations – is to configure cabinets in hot and cold aisles. If you haven’t got your racks into cold and hot aisle configurations, we can advise ways in which you can achieve improved airflow performance."];
[attrString setFont:[UIFont systemFontOfSize:20] range:NSMakeRange(0, 23)];
[attrString setFont:[UIFont systemFontOfSize:15] range:NSMakeRange(24, 325)];
[attrString setTextColor:[UIColor blackColor] range:NSMakeRange(0,184)];
[attrString setTextColor:[UIColor blueColor] range:NSMakeRange(185,325)];
break;
Meine beiden catextlayer und meine nsmutableattributedsring sind definiert in meine header-Datei. Ich mache die änderungen an meinem string vor in einem switch, dann rufen Sie diesen code zum aktualisieren der catextlayer der string wird gezeigt in:
//updates catext layer
TextLayer = [CATextLayer layer];
TextLayer.bounds = CGRectMake(0.0f, 0.0f, 245.0f, 290.0f);
TextLayer.string = attrString;
TextLayer.position = CGPointMake(162.0, 250.0f);
TextLayer.wrapped = YES;
[self.view.layer addSublayer:TextLayer];
Stürzt es ab, wenn es versucht, um die schriftart, aber ich kann nicht herausfinden, warum?
-[NSConcreteMutableAttributedString setFont:range:]: unrecognized selector geschickt Instanz 0xd384420
* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteMutableAttributedString setFont:range:]: unrecognized selector geschickt Instanz 0xd384420'
Warum ist das passiert?
InformationsquelleAutor dev6546 | 2012-09-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
NSMutableAttributedString nicht setFont:Bereich: Funktion.
Hier entnommen.... iphone/ipad: Wie genau verwenden Sie NSAttributedString?
Also habe ich ein bisschen Lesen aus der docs.
Funktionen ist...
So dass Sie sollten in der Lage sein, so etwas zu tun...
oder
wenn Sie noch mit alten ObjC-syntax.
Hoffe, das hilft.
bearbeitet nach dem Lesen docs. developer.apple.com/library/mac//#/documentation/Cocoa/...
Ich denke, dass diese docs arbeiten, nur für os x 10+, die ebenfalls einen Absturz verursacht.
Ja, ich setzte einen string anstelle des UIFont code. Ich habe es getestet auf meinem iPhone und es funktioniert gut mit dieser Linie... [string setAttributes:@{NSBackgroundColorAttributeName:[UIColor greenColor]} Bereich:NSMakeRange(4, 6)]; Wenn Sie es zu füllen UILabel dann benötigen Sie auch, um die Beschriftung zu akzeptieren, zurückzuführen text nicht einfach nur text. (In UIBuilder es ist ein dropdown-an der Spitze der inspector -)
Was ist die Fehlermeldung, die Sie bekommen. Ich habe getestet, der code, damit ich weiß, dass es funktioniert.
InformationsquelleAutor Fogmeister
Zuerst von allen,Ist die attrString Sie, sagte eine Immobilie?Wenn es eine Eigenschaft,die Sie besser überprüfen Sie, dass Sie haben, deklariert das Grundstück mit dem Attribut "copy", und Sie sind vermutlich mit dem compiler-generierten setter? Wenn JA, Die compiler-generierten setter sendet die Kopie der Nachricht an das Objekt zu kopieren. Die Kopie der Nachricht macht eine unveränderliche Kopie. Das heißt, er schafft einen NSAttributedString, nicht ein NSMutableAttributedString.
Einen Weg, um dies zu beheben, schreiben Sie Ihren eigenen setter, die verwendet mutableCopy, wie das ist, wenn Sie über ARC:
oder so, wenn Sie mit manuellem reference counting:
Anderen fix wäre, um textCopy einen NSAttributedString statt einer NSMutableAttributedString, und machen den rest des Codes, mit ihm zu arbeiten, als eine unveränderliche Objekt.
Referenz:
1️⃣So kopieren Sie eine NSMutableAttributedString
2️⃣NSConcreteAttributedString mutableString Absturz
InformationsquelleAutor ElonChan