84 votes

Référencement des variables d'instance AppDelegate

J'ai un projet qui est basé sur le modèle d'application basée sur la navigation. Dans l'AppDelegate se trouvent les méthodes -applicationDidFinishLoading: et -applicationWillTerminate: . Dans ces méthodes, je charge et enregistre les données de l'application, et je les stocke dans une variable d'instance (il s'agit en fait d'un graphique-objet).

Lorsque l'application se charge, elle charge MainWindow.xib, qui possède un NavigationConroller, qui possède à son tour un RootViewController. Le RootViewController nibName pointe vers RootView (ma classe de contrôleur actuelle).

Dans ma classe, je souhaite faire référence à l'objet que j'ai créé dans la section -applicationDidFinishLoading: afin que je puisse obtenir une référence à celle-ci.

Quelqu'un peut-il me dire comment faire ? Je sais comment faire des références entre des objets que j'ai créés par programme, mais je n'arrive pas à trouver le moyen de revenir en arrière, étant donné que l'étape intermédiaire a été effectuée à partir du fichier NIB.

204voto

leonho Points 2787

Pour les variables (généralement la structure de données du modèle) auxquelles je dois accéder n'importe où dans l'application, déclarez-les dans votre classe AppDelegate. Lorsque vous avez besoin d'y faire référence :

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
//and then access the variable by appDelegate.variable

16voto

Ben Gottlieb Points 59900

Si je comprends bien votre question, vous voulez référencer les variables/propriétés membres dans votre objet AppDelegate ? Le moyen le plus simple est d'utiliser [[UIApplication sharedApplication] delegate] pour renvoyer une référence à votre objet.

Si vous avez une propriété appelée fenêtre, vous pouvez faire ceci :

UIWindow   *mainWindow = [[[UIApplication sharedApplication] delegate] window];
//do something with mainWindow

11voto

SK9 Points 9683

Voici une alternative portable bien définie pour iOS4.0 et plus :

UIApplication *myApplication = [UIApplication sharedApplication];
UIWindow *mainWindow = [myApplication keyWindow];
UIViewController *rootViewController = [mainWindow rootViewController];

ou, en une seule ligne,

UIViewController *rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];

N'oubliez pas de définir les paramètres de la fenêtre. rootViewController (disons dans l'IB) ou cela ne servira à rien.

Prograide.com

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.

Powered by:

X