Zuweisung an schreibgeschützte Eigenschaft error iOS 6
Habe ich eine Singleton-Klasse namens Konstanten und ich brauche, um einige app-Breite Konstanten gibt. Id wie diese Konstanten werden readonly. Also habe ich Folgendes in die Constants.h-Datei
@interface Constants : NSObject
{
}
@property (nonatomic, readonly)double U_LAT;
@property (nonatomic, readonly)double U_LNG;
Dann in meine .m Datei habe diese Methode
-(id)init
{
self = [super init];
self.U_LAT = 49.2765;
self.U_LNG = -123.2177;
return self;
}
Bekomme ich diesen Fehler aus diesem code:
Assignment to readonly property
Kann ich nicht initialisieren, mein readonly-variable in der init-Methode? Wenn nicht wie kann ich Sie initialisieren?
Du musst angemeldet sein, um einen Kommentar abzugeben.
self.propertyName = val;
ist das gleiche wie[self setPropertyName:val];
- es erfordert eine Set-Methode existieren. Nur-Lesen-Eigenschaften, die nicht über setter-Methoden.Können Sie die ivar dem Rücken die Eigenschaft direkt, aber:
Den ivar ' s name wird der name der Eigenschaft mit einem Unterstrich als Präfix, wenn Sie erlauben, die Eigenschaften synthetisiert werden automatisch. Wenn Sie eine explizite
@synthesize propName;
, die ivar wird den gleichen Namen haben. Sie können auch eine variable erstellen mit beliebigen Namen, die Sie mögen, wieder mit einem Synthese-Anweisung:@synthesize cat = dog;
Es ist auch möglich, dass die Eigenschaft schreibgeschützt ist öffentlich, aber schreibbar sein, durch die Klasse; dies beinhaltet entweder das deklarieren einer setter-Methode in eine Klasse Erweiterung oder redeclaring die Eigenschaft in der Verlängerung.
Ich denke, der bessere Weg ist, zu deklarieren, die Eigenschaft in ein eigenes interface, wie diese:
Und ja, inits und dealloc, beziehen sich direkt auf die variable wie _U_LAT.
self.U_LAT
.self.foo
) beim init. Besser verwenden Sie den Unterstrich, variable_foo
.Besser noch zu erklären, Sie nicht als Eigenschaften, sondern als Konstanten.
In der
.h
- Datei, fügen Sie den folgenden code oberhalb der@interface
:Dann in der
.m
- Datei, fügen Sie den folgenden code oberhalb der@interface
:Den
U_LAT
undU_LNG
verfügbar sein, um jede Klasse, die ImporteConstants.h
, und Sie nicht haben, um mit den Eigenschaften und Schnittstellen.Es ist genau diese Art von Sache, die
const
erfunden wurde.