2013-06-02 39 views
0

我正在使用NSUserDefaults來保存一些數據,而我的應用程序正在運行,但我想轉儲應用程序終止的所有數據。這是可能的,如果是的話,我該怎麼做?謝謝! 〜Carpetfizz 我知道有這個,但我不知道該把它放在哪裏。它應該放在應用程序代理中嗎?在應用退出時轉儲NSUserDefaults?

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier]; 
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain]; 



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


    // NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier]; 
    //[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain]; 

    [NSUserDefaults resetStandardUserDefaults]; 





} 
+8

什麼,當你不希望從一個會話保存這些數據到下一個使用NSUserDefault點? –

+0

我正在使用一個SSH庫,每次執行命令時都需要進行身份驗證。所以我發現,只需存儲諸如用戶名,密碼等輸入表單並在整個應用程序中檢索它們的值就會更快。 – Carpetfizz

+2

你不應該使用NSUD,使用鑰匙串 – Kevin

回答

1

你正在做的事情是hacky,它是應用程序可維護性的一個壞主意:-)。 NSUserDefaults用於永久存儲(跨應用程序啓動)。你正在鑽入一個你永遠無法使用NSUserDefaults來存儲持久設置的路徑。你應該考慮創建一個新的類,它包含你填入NSUserDefaults的「臨時」信息。

嘗試這樣:

@interface MyAppSettings : NSObject 
@property (nonatomic, strong) NSString *userName; 
@property (nonatomic, strong) NSString *authenticationToken; 
@end 

@implementation MyAppSettings 
@end 
+1

使用用戶默認值存儲必須在下次啓動時初始化的會話狀態絕不是正確的答案。 – bbum

1

你的問題的回答是:':在ApplicationDelegate

+ (void)resetStandardUserDefaults 

類方法的方法:你應該使用NSUserDefaults

- (void)applicationWillTerminate:(UIApplication *)application 

但是一個更好的問題是:爲什麼您是否在使用NSUserDefaults,如果您想轉儲應用程序執行完成後存儲的所有信息?將所有信息存儲在一個對象上(可能是Singleton?)而不是使用NSUserDefaults會更好。

+0

謝謝,但那沒有做任何事情,我執行它錯了嗎?查看我的最新編輯 – Carpetfizz

+0

你如何測試它?你的應用如何終止?這種方法被稱爲? –

+0

應用程序在後臺時是否調用了「applicationWillTerminate」? –