При использовании делегата [[UIApplication sharedApplication]]
Я не знаю, когда и почему я должен использовать [[UIApplication sharedApplication] delegate]
Я использую делегат, когда [self.navigationController pushViewController:myView Animation:YES]
не перемещается. Я делаю MyView *delegate = [[UIApplication sharedApplication] delegate]
и [delegate pushViewController:myView Animation:YES]
для правильной навигации.
Я не знаю, правильное ли решение, и, кроме того, я не знаю, что используется для [[UIApplication sharedApplication] delegate]
или каковы его последствия для приложения.
Может кто-нибудь мне помочь?
Спасибо!!
Ответы
Ответ 1
[[UIApplication sharedApplication] delegate]
предоставит вам указатель на делегат приложения. тот, который был автоматически создан при создании проекта. Обычно он называется YourAppNameAppDelegate
.
две вещи немного неправильны с вашим кодом.
-
когда вы объявляете MyView *delegate
, это должно быть либо id delegate
, либо YourAppNameAppDelegate *delegate
.
-
Вам не нужно иметь доступ к вашему диспетчеру навигации через делегат приложения. Я бы посмотрел, почему self.navigationController терпит неудачу и обратится к этому. В основном вы используете одноэлементный шаблон, когда полагаетесь на делегат приложения. Поскольку одноэлементный шаблон является наименее крутым шаблоном проектирования программ, он не выиграет вас ни в каких точках при разговоре с другими программистами.
Ответ 2
self.appDelegate = [[UIApplication sharedApplication] delegate];
Когда вы создаете переменную, называемую appDelegate в вашем IVars, она не будет автоматически передаваться делегату приложения - вы должны установить ее самостоятельно. Из ANYWHERE в вашем приложении вы можете получить доступ к делегату с помощью приложения singleton.
[UIApplication sharedApplication]
< --- дает доступ к singleton
Метод делегата возвращает указатель на делегат приложения.
Итак, поскольку ваши переменные необходимо инициализировать, для этого есть два логических места: один находится в инициализаторе, если вы создаете один или в методе, который вызывается в начале начала использования представления и его контроллер, и это место находится в viewDidLoad.