Ссылка на методы 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];