在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;