Cette question peut être hors base, mais voici le problème que j'ai:Comment définir une valeur non initialisée dans Objective C?
Je suis en train d'exécuter un exemple de l'iPhone SDK, et je cours dans une violation d'accès. J'ai tracé un comportement que je trouve suspect.
Voici ce que la classe ressemble à:
@interface TableViewCell : UITableViewCell {
@private
UILabel *_earthquakeLocationLabel;
UILabel *_earthquakeDateLabel;
UILabel *_earthquakeMagnitudeLabel;
UIImageView *_magnitudeImageView;
}
Quand je mets un point d'arrêt dans
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier
Et regardez « soi » dans le débogueur, il montre que _earthquakeDateLabel est « 0x12 », _earthquakeMagnitudeLabel est 0x1000, et les deux autres sont zéro. Si j'essaie d'assigner à l'un des non-zéro, je reçois une violation d'accès. Je suppose que ce qui se passe, c'est qu'ils ont des valeurs fausses, et quand j'essaie de les assigner, cela essaie de décrémenter une référence sur la valeur bidon et de gonfler. Mais comme je l'ai dit, je suis relativement nouveau à l'objectif C, donc je ne suis peut-être pas à la base. Donc, ma question est: Y a-t-il quelque chose de spécial à propos de l'initialisation de ces valeurs que je devrais faire? Ou n'importe quelle manière d'assigner à la valeur quand elle a une valeur bidon dedans?
Quelques informations supplémentaires:
Donc, si je cède à nulle _earthquakeDateLabel et _earthquakeMagnitudeLabel dans initialize, qui résout le problème. Mais je ne comprends pas pourquoi l'objet est créé avec des valeurs dans ces champs; Je m'attends à ce qu'ils soient nuls. L'objet est créé sur le tas:
TableViewCell *cell = [[[TableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];