У меня есть проект, основанный на шаблоне приложения на основе навигации. В AppDelegate есть методы -applicationDidFinishLoading:
и -applicationWillTerminate:
. В этих методах я загружаю и сохраняю данные приложения и сохраняю их в переменной экземпляра (на самом деле это объект-граф).
Когда приложение загружается, оно загружает MainWindow.xib, у которого есть NavigationConroller, у которого, в свою очередь, есть RootViewController. Свойство RootViewController nibName
указывает на RootView (мой фактический класс контроллера).
В моем классе я хочу сослаться на объект, который я создал в -applicationDidFinishLoading:
методе, чтобы получить ссылку на него.
Кто-нибудь может сказать мне, как это сделать? Я знаю, как ссылаться между объектами, которые я создал программно, но я не могу понять, как вернуться назад, учитывая, что средний шаг был сделан из файла NIB.
источник
Если я понимаю ваш вопрос, вы хотите ссылаться на переменные / свойства-члены в своем объекте AppDelegate? Самый простой способ - использовать делегат [[UIApplication sharedApplication]] для возврата ссылки на ваш объект.
Если у вас есть свойство с именем window, вы можете сделать это:
UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window]; //do something with mainWindow
источник
Вот хорошо продуманная портативная альтернатива для iOS 4.0 и выше:
UIApplication *myApplication = [UIApplication sharedApplication]; UIWindow *mainWindow = [myApplication keyWindow]; UIViewController *rootViewController = [mainWindow rootViewController];
или в одной строке
UIViewController *rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
Не забудьте установить
rootViewController
свойство окна (например, в IB), иначе это подействует.источник
Определите макрос и используйте его где угодно!
#define appDelegateShared ((AppDelegate *)[UIApplication sharedApplication].delegate)
В моем коде: -
UIViewController *rootViewController = appDelegateShared.window.rootViewController;
источник