Diese Frage könnte von der Basis abweichen, aber hier ist das Problem, das ich habe:Wie setze ich einen nicht initialisierten Wert in Objective C?
Ich versuche, ein Beispiel aus dem iPhone SDK auszuführen, und ich bin in eine Zugriffsverletzung laufen. Ich habe ein Verhalten verfolgt, von dem ich glaube, dass es verdächtig ist.
Hier ist, was die Klasse wie folgt aussieht:
@interface TableViewCell : UITableViewCell {
@private
UILabel *_earthquakeLocationLabel;
UILabel *_earthquakeDateLabel;
UILabel *_earthquakeMagnitudeLabel;
UIImageView *_magnitudeImageView;
}
Als ich
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier
in
einen Haltepunkt setzen und auf "Selbst" Blick in den Debugger, zeigt es, dass _earthquakeDateLabel ist "0x12", _earthquakeMagnitudeLabel ist 0x1000 und die anderen beiden sind Null. Wenn ich versuche, einer der Nicht-Null-Variablen zuzuweisen, erhalte ich eine Zugriffsverletzung.Ich vermute, was passiert ist, dass diese falschen Werte in ihnen haben, und wenn ich versuche, ihnen zuzuordnen, versucht, eine Referenz auf den falschen Wert zu dekrementieren und explodiert. Aber wie gesagt, ich bin ziemlich neu in Objective C, also bin ich vielleicht nicht auf der Base.
Also meine Frage ist, gibt es etwas Besonderes über die Initialisierung dieser Werte, die ich tun sollte? Oder irgendeine Art, dem Wert zuzuweisen, wenn es einen falschen Wert enthält?
Einige zusätzliche Informationen:
Also, wenn ich Null bis _earthquakeDateLabel und _earthquakeMagnitudeLabel in initialize zuweisen, das das Problem behebt. Aber ich verstehe nicht, warum das Objekt mit Werten in diesen Feldern erstellt wird; Ich erwarte, dass sie null sind. Das Objekt wird auf dem Heap erstellt:
TableViewCell *cell = [[[TableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];