Sur l'iPhone, j'utilise UIViewController
's viewDidLoad
pour exécuter du code afin de configurer la vue.
Comment puis-je faire cela avec NSViewController
?
J'ai essayé loadView
mais cela ne fonctionne pas...
Sur l'iPhone, j'utilise UIViewController
's viewDidLoad
pour exécuter du code afin de configurer la vue.
Comment puis-je faire cela avec NSViewController
?
J'ai essayé loadView
mais cela ne fonctionne pas...
J'ai résolu le problème quelques minutes après avoir posté mon commentaire. J'ajoute mes conclusions en tant que réponse car c'est un exemple qui manque dans la documentation. Le code ci-dessous vous donnera la méthode viewDidLoad que vous souhaitez. C'est tellement facile que je me demande pourquoi Apple ne l'a pas encore implémenté dans OS X.
- (void)viewWillLoad {
if([NSViewController instancesRespondToSelector:@selector(viewWillLoad)]) {
[super viewWillLoad];
}
...
}
- (void)viewDidLoad {
if([NSViewController instancesRespondToSelector:@selector(viewWillLoad)]) {
[super viewDidLoad];
}
}
- (void)loadView {
BOOL ownImp = ![NSViewController instancesRespondToSelector:@selector(viewWillLoad)];
if(ownImp) {
[self viewWillLoad];
}
[super loadView];
if(ownImp) {
[self viewDidLoad];
}
}
Source originale : http://www.cocoabuilder.com/archive/cocoa/195802-garbage-collection-leaks-and-drains.html
Un danger possible de ceci est qu'Apple pourrait ajouter les méthodes -viewWillLoad
et -viewDidLoad
à un jour donné. Si tel est le cas, votre remplacement de ces méthodes serait appelé deux fois.
@Mike... Votre préoccupation est légitime et maintenant avec 10.7 Lion devenant plus comme iOS, je pense que cela pourrait bien être inclus dans Lion lui-même. Je vais surveiller cela donc ne t'inquiète pas pour moi mais oui, avoir les mêmes noms de fonction peut causer des problèmes sinon.
Dès OS X 10.10, viewDidLoad
est disponible et pris en charge sur NSViewController
.
Auparavant, vous deviez vous référer à cette information dans les notes de publication de Snow Leopard :
Conseils pour les personnes recherchant les méthodes -viewWillLoad et -viewDidLoad dans NSViewController
Même si NSWindowController possède les méthodes -windowWillLoad et -windowDidLoad que vous pouvez remplacer, la classe NSViewController introduite dans Mac OS 10.5 n'a pas de méthodes correspondantes -viewWillLoad et -viewDidLoad. Vous pouvez remplacer -[NSViewController loadView] pour personnaliser ce qui se passe immédiatement avant ou immédiatement après le chargement du nib effectué par un contrôleur de vue.
J'ai posé la question sur stackoverflow.com/questions/4492485/… mais je pourrais aussi vous demander : j'ai lu cela dans la documentation et j'ai essayé de jouer avec loadView mais je ne comprends toujours pas comment cela aide à faire quelque chose "immédiatement après le chargement du nib". J'ai un NSTabView dans le fichier xib qui est correctement connecté mais il est toujours à 0x0 lorsque je mets un point d'arrêt dans loadView.
Je pense que [viewController loadView] n'est pas une méthode capable de remplacer viewDidLoad. Car cette méthode sera appelée par le système à chaque fois que [viewController view] est appelé. Ainsi, cette méthode peut être appelée plusieurs fois dans une application en cours d'exécution.
À partir de OSX 10.10 (Yosemite), il existe désormais un -viewDidLoad
, -viewWillAppear
, -viewDidAppear
, -viewWillDisappear
dans NSViewController
. Voir WWDC 2014 - Storyboards and Controllers on OS X session pour plus d'infos, pour savoir quand chacun d'eux est appelé, etc.
Voici l'extrait pertinent de la documentation de l'en-tête 10.10 sur -viewDidLoad:
Appelé après le chargement de la vue. Pour les contrôleurs de vue créés en code, c'est après -loadView. Pour les contrôleurs de vue désarchivés à partir d'un nib, c'est après que la vue est définie. Par défaut ne fait rien.
- (void)viewDidLoad NS_AVAILABLE_MAC(10_10);
J'ai tendance à éviter de faire des choses dans awakeFromNib
, car cela peut parfois être appelé plus d'une fois. Par exemple, appeler makeViewWithIdentifier:owner:
et passer self comme propriétaire provoquera l'appel de awakeFromNib
. Voir developer.apple.com/library/mac/documentation/Cocoa/Conceptual/….
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.