2012-11-24 1 views
0

В приложении iOS я реализовал некоторую прикладную логику в AppDelegate.iOS, используйте AppDelegate в InterfaceBuilder, созданы два экземпляра

Несколько контроллеров вида и т.д., необходимо позвонить в AppDelegate, поэтому я поместил AppDelegate в Interface Builder и дал ViewControllersIBOutlet AppDelegate* и обратил на него ссылку.

В приложении я вижу теперь, что создается два экземпляра созданного AppDelegate, который вызывается, и он получает все уведомления и тот, который связан с ViewControllers.

Так я изменил мое приложение, чтобы использовать в ViewControllers:

app_del = (AppDelegate*)[[UIApplication sharedApplication] delegate].

Тогда я называю это appDelegate. Но это также другой экземпляр, чем тот, который получает уведомления. Может ли кто-нибудь объяснить, почему?

Может ли кто-нибудь сказать мне, что происходит не так? Мое подозрение от googling заключается в том, что iOS создает экземпляр AppDelegate, а Interface Builder не знает об этом и создает еще один? Это верно?

Может ли кто-нибудь дать мне некоторый намек на то, как лучше всего создавать/планировать экземпляры в Interface Builder и в каком порядке они создаются в приложении при запуске, и в каком уведомлении я могу полагаться, что все они созданы?

благодарит любые подсказки, Torsten.

ответ

2

Ваши подозрения верны. iOS создает экземпляр вашего делегата приложения при запуске приложения, этот экземпляр является зарегистрированным, чтобы получать все события делегата и так далее. См. here.

Все, что вы добавляете в xib или раскадровку, будет новым экземпляром и не будет работать.

Чтобы получить указатель на прикладного делегата, использовать этот метод:

[[UIApplication sharedApplication] delegate]; 

Там есть школа мысли, что говорит, что вы не должны злоупотреблять делегат приложения как обычно имеющиеся глобальные данные или метод но это выходит за рамки этого ответа.