1

我需要在首選項中存儲「user_session」和「game_deck」相關信息。如何爲NSUserDefaults指定名稱

在我的應用程序的某些時候,我需要清除存儲在「game_deck」中的所有數據,並且在註銷時,我需要清除存儲在「user_session」中的所有數據。

我已經在android中通過指定文件名優先來實現此功能。

   SharedPreferences prefs = getSharedPreferences(
         "user_session", Context.MODE_PRIVATE); 
       Editor editor = prefs.edit(); 
       editor.clear(); 
       editor.commit(); 

   SharedPreferences prefs = getSharedPreferences(
         "game_deck", Context.MODE_PRIVATE); 
       Editor editor = prefs.edit(); 
       editor.clear(); 
       editor.commit(); 

由於我創造了iPhone同一個項目,我怎麼能實現在Objective-C相同的功能?

我需要使用

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

存儲我data.But我怎麼可以指定兩個不同的默認值,這樣我可以清除特定的默認文件所有的變量?

感謝提前:)

回答

1

NSUserDefault與Android中的SharedPreference不同。這裏有一個共同的對象,您可以在其中保存所有數據。沒有單獨的用戶默認說「user_session」和「game_deck」。

你可以做的是建立一個字典

NSMutableDictionary *userSessionDict = [[NSMutableDictionary alloc] init]; 
[userSessionDict setObject:@"someUsername" forKey:@"username"]; 


NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[default setObject:userSessionDict forKey:@"user_session"]; 

//you can remove using 
[default removeObjectForKey:@"user_session"]; 
+0

是的,它適用於我。謝謝! – 2013-03-01 06:18:04

+0

@downvoter關心評論 – Krishnabhadra 2013-03-01 07:10:56

1

你可能只存儲在「根」級,而不是維護兩個獨立的層次結構兩個孩子。只需使用get/set NSDictionary方法獲取並存儲它們即可。例如,爲了讓您的「USER_SESSION」的喜好,你會使用這樣的:

NSDictionary user_session = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"user_session"]; 

同樣,你可以清除此使用:

[[NSUserDefaults standardUserDefaults] setObject:[NSDictionary dictionary] forKey:@"user_session"]; 

你只需要確保你初始化如果字典尚未存在,它們將在發佈時推出。

+0

謝謝!它適用於我 – 2013-03-01 06:21:25

0

你可以做下面這個:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:Context.MODE_PRIVATE forKey:@"user_session"]; 
[defaults setObject:Context.MODE_PRIVATE forKey:@"game_deck"]; 

當你想要清除特定的所有變量:(用「USER_SESSION」爲例如):

[defaults removeObjectForKey:@"user_session"]; 
0

你可以試試這個:這將刪除所有存儲在userDefaults中的對象,在y我們的應用。

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