При использовании делегата [[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.