Der Versuch, den CGColor-Wert von einer Eigenschaft abzurufen, führt zum Absturz
-
17-09-2020 - |
Frage
Ich versuche, eine Eigenschaft wie folgt festzulegen:
-Schnittstelle:
@property (readwrite, assign) CGColorRef otherBallColor;
-someMethode:
CGColorRef ballColor = [UIColor colorWithRed:255.0/256.0 green:165.0/256.0 blue:239.0/256.0 alpha:1.0].CGColor;
[self setOtherBallColor:ballColor];
Sobald ich versuche, auf den Wert zuzugreifen, stürzt es ab –
-someOtherMethod (in diesem Fall drawRect):
CGContextSetFillColorWithColor(context, otherBallColor);
Aber wenn ich in der „someMethod“ das tue –
CGColorRef ballColor = [UIColor blueColor].CGColor;
...es funktioniert alles gut.Kann jemand erklären, was los ist?
Vielen Dank (PS, ziemlich neu in Objective-C, allerdings nicht im Programmieren im Allgemeinen)
Lösung
Sie müssen zurückgegeben haben
Ich würde Ihnen empfehlen, Uicolor anstelle von CGColorref zu verwenden, wenn ich in diesem Fall möglich ist.
Andere Tipps
Sprechen Sie über eine späte Antwort, aber ich habe eine alternative Lösung für dieses spezielle Problem, auf das ich vor einiger Zeit gestoßen bin.Ich fand diese Frage vor der Lösung, also dachte ich, ich würde meinen Beitrag dazu leisten.Es stellt sich heraus, dass UIColor
hat eine Instanzmethode namens setFill
, wodurch der Empfänger als aktuelle Kontextfüllfarbe festgelegt wird.Man könnte also schreiben:
CGContextRef myContext = UIGraphicsGetCurrentContext();
[[UIColor colorWithRed:255.0/255.0 green:165.0/255.0
blue:239.0/255.0 alpha:1.0] setFill];
CGContextFillPath(myContext);
Meiner Meinung nach ist dies eine sauberere Lösung, da Sie sich keine Sorgen darüber machen müssen, welche Daten Sie behalten oder später wieder freigeben CGColor
S.Tatsächlich müssen Sie sich nicht einmal mit Befehlen zur Einstellung der Füllfarbe von Core Graphics befassen CGContextSetFillColorWithColor
.
Sie können sich das ansehen - (void)setFill
Methode ausführlicher in der UIColor Apple-Dokumentation.