簡體   English   中英

從Objective-C中的主類調用方法

[英]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子類首先運行,然后運行設置UIApplicationDelegateUIApplication 這就是為什么我無法聲明啟動超時間隔的原因,我的應用程序會遞歸運行。

搜索后,我得到了這個鏈接。 我在該鏈接中遵循@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM