Метод вызова из основного класса в 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;