2010-07-30 118 views

回答

3

第一個問題是你什麼時候節省?答案是在兩個地方(假設你想支持3.x和4.x設備)。

首先,OS 3.x設備(以及OS 4級的設備沒有多任務):

- (void)applicationWillTerminate:(UIApplication *)application 

其次,對於OS 4.x的設備:

- (void)applicationDidEnterBackground:(UIApplication *)application 

你需要在iOS4設備上這樣做,因爲如果應用程序在後臺關機,它只會被殺死;你永遠不會看到applicationWillTerminate消息。

至於如何,它取決於你的應用程序有多複雜。我創建了我對於可能要保存其狀態的每個視圖控制器實現一個簡單的協議:

@protocol SaveState 

- (NSData*) saveState; 
- (id) initWithSaveState:(NSData*)data; 

@end 

它通過視圖控制器在主導航控制器循環和調用保存狀態方法保存的狀態。然後在applicationDidFinishLaunching:方法中做相反的處理。 More information on my blog

+0

謝謝斯蒂芬。這真的幫助了我。如果我遇到任何其他問題,我會盡快回復您。 – Krishnan 2010-07-30 11:31:48

1

在您的應用程序委託中,您可以定義-applicationWillTerminate:方法以包含保存應用程序狀態數據的代碼。

- (void) applicationWillTerminate:(UIApplication *)application { 
    // save state to data model here... 
} 

您的數據模型取決於您。例如,這可能是一組user defaults或Core Data存儲。

下次啓動應用程序時,您可以檢查-applicationDidFinishLaunching:中保存的狀態數據並適當地初始化應用程序。

如果您使用的是iOS 4並且您的應用程序支持多任務功能,那麼您將獲得一些免費的狀態保存功能,因爲the app resigns focus而不是終止。

+0

嗨亞歷克斯, Thanks.Let我說,我有四個選項卡,目前我在第一個選項卡,並在第六屏幕,(SIX導航我做了),我怎麼能存儲的信息很容易識別,其中一個下一次用戶打開應用程序時,我應該打開它。我認爲一旦App下次啓動,我將不得不以編程方式遍歷該特定的View?我的假設是否正確? – Krishnan 2010-07-30 10:03:09

+1

正確的是,您保存了用戶停止位置的「樹狀圖」,然後在應用重新啓動時再返回。 – 2010-07-30 10:11:01

相關問題