2009-12-26 61 views
5

我正在嘗試處理電話和待機以及這種性質的事情。我添加了功能- (void)applicationWillResignActive:(UIApplication *)應用程序永遠不會被調用

- (void)applicationWillResignActive:(UIApplication *)application 

- (void)applicationDidBecomeActive:(UIApplication *)application 

我UIApplicationDelegate。當從待機狀態退出時,「applicationDidBecomeActive」總是被調用。然而問題是「applicationWillResignActive」永遠不會被調用。

我想知道是否有人遇到這個問題,以及是否有人發現一個原因。

編輯

更多信息,我發現,這會從運行的applicationDidFinishLaunching我的引擎的更新循環是導致我錯過了消息。我打電話

while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, .002, FALSE) == kCFRunLoopRunHandledSource); 

捕捉所有iphone消息,但它似乎並沒有捕獲resignActive消息變得不活動之前。

試圖爲我的更新循環分叉線程會導致奇怪的崩潰錯誤。任何人有任何快速解決建議?

+1

根據該文檔applicationWillResign活性被調用時的疊加窗口彈出或當裝置被鎖定。如果你手動鎖定iPhone,你會接到電話嗎? – lyonanderson 2009-12-26 23:57:15

回答

6

當主頁按鈕被擊中時,它會在iOS 4.0中調用。當主頁按鈕被擊中的iOS 4.0

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
    NSLog(@"Application Did Resign Active"); 
} 

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    NSLog(@"Application Did Enter Background"); 
} 

當你雙擊home鍵和重啓再次在App,下面的委託方法被稱爲

下面的委託方法被調用。

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    NSLog(@"Application Will Enter Foreground"); 
} 



- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    NSLog(@"Application Did Become Active"); 
} 
+0

添加'NSLog(@「%s」,__PRETTY_FUNCTION __);'給每個appDelegate方法,而不是更快地打印您當前所在的方法 – 2016-03-09 17:54:40

2

我不認爲

- (void)applicationWillResignActive:(UIApplication *)application 

在接到電話時被調用。我認爲操作系統等待用戶回答或拒絕電話。如果我拒絕了,那麼應用程序說,活着

- (void)applicationDidBecomeActive:(UIApplication *)application 

被稱爲。如果回答,那麼你的應用程序被告知退出,它將接收

- (void)applicationWillTerminate:(UIApplication *)application 
0

一定要允許

- (void)applicationDidFinishLaunching:(UIApplication *)application 

運行遊戲循環之前返回。一種方法是使用功能

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay 

上的應用程序委託和的延遲後運行遊戲循環說」 0.01" 完成此操作後,該消息應該能夠正常開火。我相信消息跺腳的原因是因爲運行循環停留在applicationDidFinishLaunching上,並且無法將任何其他UIApplicationDelegate消息推送到隊列中。

-2
- (void)applicationWillResignActive:(UIApplication *)application { 
/* 
Sent when the application is about to move from active state to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 
Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 
*/ 
} 
相關問題