J'ai un projet 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 objet-graphe).
Lorsque l'application se charge, elle charge MainWindow.xib, qui a un NavigationConroller, qui à son tour a un RootViewController. La nibName
propriété RootViewController pointe vers RootView (ma classe de contrôleur réelle).
Dans ma classe, je souhaite faire référence à l'objet que j'ai créé dans la -applicationDidFinishLoading:
méthode, afin de pouvoir y faire référence.
Quelqu'un peut-il me dire comment faire cela? Je sais comment faire référence entre des objets que j'ai créés par programme, mais je n'arrive pas à comprendre pour revenir en arrière, étant donné que l'étape du milieu a été effectuée à partir du fichier NIB.
la source
Si je comprends votre question, vous souhaitez référencer des variables / propriétés de membre dans votre objet AppDelegate? Le moyen le plus simple consiste à utiliser [[UIApplication sharedApplication] delegate] pour renvoyer une référence à votre objet.
Si vous avez une propriété appelée window, vous pouvez le faire:
UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window]; //do something with mainWindow
la source
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, sur une seule ligne,
UIViewController *rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
N'oubliez pas de définir la
rootViewController
propriété de la fenêtre (disons dans IB) ou cela fera jack.la source
Définissez une macro et utilisez-la n'importe où!
#define appDelegateShared ((AppDelegate *)[UIApplication sharedApplication].delegate)
Dans mon code: -
UIViewController *rootViewController = appDelegateShared.window.rootViewController;
la source