在Objective-C中从主类调用方法
我做了定时器的function,如果用户不能在屏幕上触摸10分钟,然后我的应用程序直接进入login屏幕。 对于上面的问题,我使用示例代码从这里https://github.com/B-Sides/ELCUIApplication在类的命名做一些改变,所以我的class是PB_TIMER_UIApplication
而不是ELCUIApplication
。 我在main.m类中调用了PB_TIMER_UIApplication
类,它的实现如下,
return UIApplicationMain(argc, argv, NSStringFromClass([PB_TIMER_UIApplication class]), NSStringFromClass([AppDelegate class]));
我将principalClassName设置为PB_TIMER_UIApplication
现在我在PB_TIMER_UIApplication
创build一个属性和实例方法,如下所示,
@interface PB_TIMER_UIApplication : UIApplication{ NSTimer *_idleTimer; } @property(nonatomic) int timerTimeOutIntervals; - (void)resetIdleTimer;
现在,我希望我的应用程序在login屏幕/超时会话之前显示警报。 如果提示button按下确定,然后我的计时器再次启动10秒。 那为什么我为timerTimeOutIntervals
创build一个属性,以及我想在整个应用程序中调用的属性和resetIdleTimer
实例方法。 所以我试图访问属性/方法像Appdelegate调用, [[PB_TIMER_UIApplication sharedApplication] setTimerTimeOutIntervals:10];
但它显示我静态错误,
我的问题,我错了,以及如何从原则类调用实例方法的属性?
你的类应该从UIREsponderinheritance。 例如:
MyAppDelegate:UIResponder <UIApplicationDelegate>
你应该使用这种方式来获取它的访问权限:
[[[UIApplication sharedApplication] delegate] setTimerTimeOutIntervals:10];
如果你想调用你的方法,然后尝试:
[(MyAppDelegate*)[[UIApplciation sharedApplication] delegate] someMethod];
UPD:你可以尝试使用它:
[(PB_TIMER_UIApplication*)[UIApplication sharedApplication] setTimerTimeOutIntervals:10];
是的,我解决了我的问题。 我改变了我的应用程序体系结构,首先我创build了UIApplication
子类,并将它设置为main.m文件中的一个原则类。 由于这个我的UIApplication
子类首先运行,然后在UIApplicationDelegate
设置的主要UIApplication
。 为什么我无法声明启动超时间隔,我的应用程序进入recursion。
search后我有这个链接。 我遵循@Brian King的build议。 我创build了我自己的自定义UIWindow
类,并把所有的超时代码作为他给定的Github链接代码。
现在我的应用程序架构师是我把我的rootviewcontroller我的自定义UIWindow类,然后显示我的自定义警报视图,并在警报视图button上写入超时/继续计时器function。 注意: – 根据苹果文件给予UIResponder链每触摸它调用superview,最后调用UIWindow。
按照您的要求,我会build议您在AppDelegate应用程序中使用sendEvent:(UIEvent *)事件方法,如果事件触摸相位types是UITouchPhaseBegan,则在该重置计时器中。
这终于为我工作。
#define gkSDUIApplication (SDUIApplication *)[UIApplication sharedApplication] SDUIApplication *myUIApplication = gkSDUIApplication; myUIApplication.myProperty;