如何为NSUserDefaults指定名称

时间:2013-03-01 06:06:20

标签: ios objective-c cocoa-touch sharedpreferences nsuserdefaults

我需要在偏好中存储“user_session”和“game_deck”相关信息。

在我的应用程序的某个时刻,我需要清除存储在“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];

用于存储我的数据。但是如何指定两个不同的默认值,以便我可以清除特定默认文件中的所有变量?

提前致谢:)

4 个答案:

答案 0 :(得分:1)

您可以在“根”级别上存储两个子节点,而不是维护两个单独的层次结构。只需使用get / set NSDictionary方法获取并存储它们。例如,要获取“user_session”首选项,请使用以下命令:

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

同样,您可以使用以下方法清除:

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

如果它们尚不存在,您必须确保在启动时初始化词典。

答案 1 :(得分:1)

NSUserDefault的工作方式与Android中的SharedPreference不同。这里有一个共同的standardUserDefault对象,您可以在其中保存所有数据。说“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"];

答案 2 :(得分: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"];

答案 3 :(得分:0)

您可以尝试:在您的应用程序中删除存储在userDefaults中的所有对象。

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