Ссылка на методы AppDelegate - iphone

У меня есть AppDelegate, который имеет 3 представления. Я добавляю все три

[window addSubview:gameViewController.view];
[window addSubview:viewSettings.view];
[window addSubview:viewController.view];
[window makeKeyAndVisible];

В делегате приложения у меня есть несколько методов для обмена представлениями, вызывая

[window bringSubviewToFront:gameViewController.view]; 

Когда я внутри viewController, я использую

pinkAppDelegate *appDelegate=  (pinkAppDelegate *)[[UIApplication sharedApplication] delegate];

[appDelegate switchToSettings];

чтобы переключить мои подпрограммы... пока что так хорошо.

НО, когда я нахожусь в своем представлении. Устанавливая UIViewController, и выполняю тот же вызов appDelegate, он перехватывает, как будто он не понимает, как вызвать метод appDelegate.

У меня есть все мои взгляды, привязанные к моему синтаксису xib, но не могу понять, почему я не могу пройти методы в основном appdelegate

Ответы

Ответ 1

Внутри viewController вы настраиваете локальную переменную, называемую appDelegate, которая указывает на делегат вашего приложения. Что делает эта строка:

pinkAppDelegate *appDelegate= (pinkAppDelegate *)[[UIApplication sharedApplication] delegate];

Эта переменная является локальной для viewController, поэтому вы не можете использовать ее в контроллере представлений настроек. Вам нужно настроить там еще одну переменную.

В качестве альтернативы используйте эту симпатичную #define во всем приложении. (Вам нужно поместить его в файл заголовка .h, который вы включаете в каждый файл в своем проекте.)

#define myAppDelegate (MyAppDelegate *)[[UIApplication sharedApplication] delegate]

Затем вы можете сделать следующее в любом месте:

[myAppDelegate doSomething];

Ответ 2

Для справки все еще есть опечатка в вышеизложенном, также у меня есть еще одно дополнение, которое помогает избежать предупреждений о том, что нужно бросать каждый раз. если вы используете:

#import "MyAppDelegate.h"
#define myAppDelegate (MyAppDelegate *) [[UIApplication sharedApplication] delegate]

Я помещаю это в константы .h, а затем могу использовать

[myAppDelegate doSomething];

где-либо я импортирую константы .h

Ответ 3

В ответ Джейн была опечатка.

Используйте следующую строку в файле заголовка (например, define.h), который вы импортируете в каждом классе:

#define myAppDelegate [[UIApplication sharedApplication] delegate]

Вы также можете использовать строку в файле заголовка префикса - это простой способ получить доступ к этому везде.

то в любом методе вы можете использовать любое из следующих действий:

[myAppDelegate doSomething]; 
 myAppDelegate.property=value;
 myAppDelegate.childClassOfMyAppDelegate.property=value;
[myAppDelegate.ChildOfMyAppDelegate doSomething];