2016-03-22 74 views
0

假設我構建了一個iPhone應用程序,該應用程序在其中一個屏幕上接受用戶名和密碼。當我輸入用戶名時,我會收到一個高優先級事件,如電話。 此時,我的應用將從活動狀態轉換爲非活動狀態。iPhone應用程序正處於激活狀態

這裏我的問題是:我需要在我的應用程序中執行哪些步驟以便我可以保存當前應用程序狀態(並輸入信息),以便稍後在我的應用程序變爲活動狀態時可以恢復相同的狀態?

這個問題被iOS採訪之一。

我的答案是在applicationWillResignActive委託方法中處理active到inactive狀態的轉換,以保存部分輸入的用戶信息的詳細信息並將其恢復到applicationDidBecomeActive方法中。應用程序用戶界面狀態,我們不必處理,因爲操作系統會照顧它。

這看起來像面試官不相信我的答案。他不停地問我,你將如何處理(你會在你的應用中執行的步驟)從應用狀態轉換到非活動狀態,然後轉換爲活動狀態,以便應用狀態恢復/完好無損?

回答

1

你的答案是正確的,面試官很可能找你來命名每一種方法,你很可能只命名你說兩個。對於某些App UI狀態,還有其他一些代表方法,例如applicationDidEnterBackgroundapplicationWillEnterForeground

如果您在註釋中閱讀了這些方法的默認說明,您將更好地瞭解每種方法的用途。例如,applicationWillResignActive具體指傳入的電話或SMS消息:

//當應用程序即將從活動狀態轉移到非活動狀態時發送。對於某些類型的臨時中斷(例如來電或SMS消息)或用戶退出應用程序並開始轉換到後臺狀態時,可能會發生這種情況。

//使用此方法可暫停正在進行的任務,禁用定時器並降低OpenGL ES幀速率。遊戲應該使用這種方法來暫停遊戲。

而且applicationDidEnterBackground是當用戶關閉您的應用程序保存用戶數據:

//使用這個方法來釋放共享資源,保存用戶數據,無效定時器和儲存足夠的應用程序狀態信息將應用程序恢復到當前狀態,以防以後終止。

//如果您的應用程序支持後臺執行,則調用此方法而不是applicationWillTerminate:當用戶退出時。

查看AppDelegate。一個新項目的m文件,這些註釋對於理解哪些將處理哪些狀態以及何時應該使用每個項目非常有用。

此外,一定要在處理應用程序狀態對蘋果的文檔閱讀起來:The App Life Cycle

0

我想你所談論更多關於restore state。所有的
首先,實現應用程序的委託協議:

func application(application: UIApplication, shouldRestoreApplicationState coder: NSCoder) -> Bool { 
    return true 
} 
func application(application: UIApplication, shouldSaveApplicationState coder: NSCoder) -> Bool { 
    return true 
} 

然後在您的視圖控制器,實現UIStateRestoring協議。在這裏你應該注意到,如果你想存檔你自己的複雜對象,不要忘記實施NSCoder
請深入「國家恢復」。

此外,當你的應用程序轉到後臺,你需要做一些工作,如停止計時器,暫停正在進行的任務。
當進入前臺時,您需要執行一些操作,例如啓動暫停的任務,並準備刷新頁面。

+0

感謝您的回覆。這裏是一個[鏈接](https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/StrategiesforImplementingYourApp/StrategiesforImplementingYourApp.html#//apple_ref/doc/uid/TP40007072-CH5-SW2)我偶然發現了有關保存和恢復應用程序狀態的詳細討論。我希望這不僅適用於後臺/前臺狀態轉換,而且適用於恢復被中斷的應用程序(我的使用案例)。 – Marimuthu

相關問題