J'ai remarqué que si vous chargez des vues connectées à partir d'une plume, vous devez surcharger initWithCoder si vous voulez ajouter du code d'initialisation parce que l'initialisateur désigné n'est pas appelé (ce qui est logique) et si vous ne chargez pas la vue d'une plume puis le même code doit être exécuté dans l'initialiseur désigné.Quelle est la manière correcte d'exécuter le code d'initialisation si un objet est chargé à partir d'une plume ou créé par programmation?
Donc, pour gérer les deux cas, vous avez besoin du même code d'initialisation dans les deux méthodes.
C'est la meilleure solution que j'ai trouvée jusqu'à présent, mais je me demande s'il existe une façon plus conventionnelle de le faire. Ce code est dans une sous-classe UITableViewCell mais il pourrait être tout UIView vraiment:
/*
* Seems like there should be a standard method for this already.
*/
- (void)didFinishInitializingOrUnacrhiving {
/*** Do stuff that makes the most sense to do in an initializer. ***/
}
- (id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
[self didFinishInitializingOrUnacrhiving];
}
return self;
}
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
[self didFinishInitializingOrUnacrhiving];
}
return self;
}
Donc, toute pensée à ce sujet? Est-ce la «bonne façon» de faire les choses, y a-t-il des pièges potentiels ici, ou est-ce que je manque complètement quelque chose?
Soyez conscient que lorsque vous utilisez -initWithCoder: d'autres objets que votre récepteur doit envoyer des messages à ne pas avoir été initié encore. -awakeFromNib peut être le meilleur choix. Voir la documentation pour -awakeFromNib. – Giao
Giao, si vous aviez fait une réponse et pas seulement un commentaire, je l'aurais marqué comme la réponse acceptée :) Je pense que l'utilisation de awakeFromNib s'est débarrassé de quelques problèmes dans un cas. – Nimrod
Il n'a pas vraiment résolu votre problème. Il a juste perdu beaucoup de lumière. – Giao