Метод вызова из основного класса в objective-C

Я выполнял функцию таймера, если пользователь не может коснуться экрана в течение 10 минут, тогда мое приложение напрямую переходит на экран входа. Для вышеуказанной проблемы я использую здесь пример кода https://github.com/B-Sides/ELCUIApplication, чтобы внести некоторые изменения в присвоение имени классу, поэтому мой класс PB_TIMER_UIApplication вместо ELCUIApplication. Я называю класс PB_TIMER_UIApplication в классе main.m следующим образом:

return UIApplicationMain(argc, argv, NSStringFromClass([PB_TIMER_UIApplication class]), NSStringFromClass([AppDelegate class]));

Я устанавливаю mainClassName как PB_TIMER_UIApplication

Теперь я создаю один метод свойства и экземпляра в PB_TIMER_UIApplication, как показано ниже,

@interface PB_TIMER_UIApplication :  UIApplication{
    NSTimer *_idleTimer;
}
@property(nonatomic) int timerTimeOutIntervals;

- (void)resetIdleTimer;

Теперь я хочу, чтобы мое приложение показывало предупреждение перед тем, как перейти к сеансу входа в систему/тайм-ауту. Если кнопка предупреждения нажата, то мой таймер снова начнется в течение 10 секунд. Вот почему я создаю свойство для timerTimeOutIntervals и это свойство и resetIdleTimer  метод экземпляра, который я хочу вызвать во всем приложении. Поэтому я пытаюсь получить доступ к свойству/методу как вызов Appdelegate, [[PB_TIMER_UIApplication sharedApplication] setTimerTimeOutIntervals:10];, но он показывает статическую ошибку,

enter image description here

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

Ответ 1

Да, я решаю свою проблему. Сначала я изменил архитектуру приложения, создав подкласс UIApplication и установил его как основной класс в файле main.m. Из-за этого сначала запускается мой подкласс UIApplication, затем устанавливаются основные UIApplication, где UIApplicationDelegate. И поэтому я не могу объявить интервалы времени запуска, мое приложение переходит в рекурсию.

После поиска я получил ссылку this. Я следую предложению @Brian King в этой ссылке. Я создаю собственный собственный класс UIWindow и устанавливаю весь код тайм-аута в качестве его кода ссылки Github.

Теперь мой архитектор приложений - я установил свой rootviewcontroller в свой пользовательский класс UIWindow, затем покажу свое пользовательское представление предупреждения и функцию тайм-аута/продолжения таймера/продолжения на кнопках просмотра предупреждений. Примечание: - В соответствии с яблочным документом, указанным в цепочке UIResponder, каждое касание вызывает его просмотр и, наконец, вызывает UIWindow.

Ответ 2

Ваш класс должен быть унаследован от UIREsponder. Например:

 MyAppDelegate:UIResponder <UIApplicationDelegate>

И вы должны использовать этот способ для получения доступа к нему:

 [[[UIApplication sharedApplication] delegate] setTimerTimeOutIntervals:10];

Если вы хотите вызвать свои методы, попробуйте:

 [(MyAppDelegate*)[[UIApplciation sharedApplication] delegate] someMethod];

UPD: вы можете попробовать использовать его:

 [(PB_TIMER_UIApplication*)[UIApplication sharedApplication] setTimerTimeOutIntervals:10];

Ответ 3

В соответствии с вашим требованием я предлагаю вам использовать метод событий sendEvent: (UIEvent *) в приложении AppDelegate и в этом таймере reset, если тип фазы касания события - UITouchPhaseBegan.

Ответ 4

Это, наконец, сработало для меня.

#define gkSDUIApplication (SDUIApplication *)[UIApplication sharedApplication]

SDUIApplication *myUIApplication = gkSDUIApplication;
myUIApplication.myProperty;