[英]Calling method from principal class in objective-C
如果用戶在10分鍾內無法觸摸屏幕,那么我就完成了超時功能,然后我的應用程序直接進入了登錄屏幕。 對於上述問題,我使用來自此處的示例代碼https://github.com/B-Sides/ELCUIApplication對類的命名進行了一些更改,因此我的類是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
創建一個屬性和實例方法,如下所示,
@interface PB_TIMER_UIApplication : UIApplication{
NSTimer *_idleTimer;
}
@property(nonatomic) int timerTimeOutIntervals;
- (void)resetIdleTimer;
現在,我希望我的應用程序在進入登錄屏幕/超時會話之前顯示警報。 如果警報按鈕按OK,則我的計時器再次啟動10秒鍾。 這就是為什么我要為timerTimeOutIntervals
創建一個屬性,而我想在整個應用程序中調用該屬性和resetIdleTimer
實例方法的原因。 所以我試圖像Appdelegate調用一樣訪問屬性/方法, [[PB_TIMER_UIApplication sharedApplication] setTimerTimeOutIntervals:10];
但是它告訴我靜態錯誤,
我的問題是我錯了,如何從原則類調用實例方法的屬性?
您的課程應該從UIREsponder繼承。 例如:
MyAppDelegate:UIResponder <UIApplicationDelegate>
並且您應該使用這種方式來獲取訪問權限:
[[[UIApplication sharedApplication] delegate] setTimerTimeOutIntervals:10];
如果要調用方法,請嘗試:
[(MyAppDelegate*)[[UIApplciation sharedApplication] delegate] someMethod];
UPD:您可以嘗試使用它:
[(PB_TIMER_UIApplication*)[UIApplication sharedApplication] setTimerTimeOutIntervals:10];
是的,我解決了我的問題。 我首先更改了應用程序的體系結構,然后創建了UIApplication
子類,並將其設置為main.m文件中的主體類。 因此,我的UIApplication
子類首先運行,然后運行設置UIApplicationDelegate
主UIApplication
。 這就是為什么我無法聲明啟動超時間隔的原因,我的應用程序會遞歸運行。
搜索后,我得到了這個鏈接。 我在該鏈接中遵循@Brian King的建議。 我創建了自己的自定義UIWindow
類,並將所有超時代碼設置為他給定的Github鏈接代碼。
現在,我的應用架構師是將rootviewcontroller放在自定義UIWindow類上,然后顯示我的自定義警報視圖,並在警報視圖按鈕上編寫超時/繼續計時器功能。 注意:-根據給蘋果的文檔,UIResponder鏈上的每一次觸摸都將其稱為超級視圖,最后調用UIWindow。
根據您的要求,如果事件觸摸階段類型為UITouchPhaseBegan,我建議您在應用程序的AppDelegate和該重置計時器中使用sendEvent:(UIEvent *)event方法。
這終於對我有用。
#define gkSDUIApplication (SDUIApplication *)[UIApplication sharedApplication]
SDUIApplication *myUIApplication = gkSDUIApplication;
myUIApplication.myProperty;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.