2013-11-20 3 views
1

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

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

Я поставил principalClassName как 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

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

ответ

0

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

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

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

0

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

MyAppDelegate:UIResponder <UIApplicationDelegate> 

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

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

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

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

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

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

Извините, что он не работает, потому что мой класс priciple работал раньше, поэтому я не могу объявить или инициализировать idletimeinterval. – Tirth

0

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

0

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

#define gkSDUIApplication (SDUIApplication *)[UIApplication sharedApplication] 

SDUIApplication *myUIApplication = gkSDUIApplication; 
myUIApplication.myProperty; 
Смежные вопросы