2013-09-16 34 views
0

我已经尝试删除应用程序启动时的所有键值对,并且当我检查键时,这些键保存在NSUserDefault中。我有这些偏好存储。nsuserdefault有键值设置如何删除它?

NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]; 
NSLog(@"all keys %@", keys); 


keys (
    NSLanguages, 
    AppleITunesStoreItemKinds, 
    AppleLocale, 
    AppleLanguages, 
    NSInterfaceStyle 
) 

当我将新动态值存储到NSUserDefaults时,我想选择除这些首选项之外的所有键。

请帮我解决这个问题。

在此先感谢

+1

为什么要删除不属于你的偏好? – Tricertops

+0

我想检查值是否插入NSUserDefaults。不删除这些偏好,我该怎么办?请建议。 – user2677941

+1

如果测试某个对象,则该字典将返回nil(如果未设置)。 –

回答

2

不要做你想做的事情。不要篡改Apple添加的任何键。保留您自己的一组键(最好在名称上加上前缀)并仅编辑这些键。

通常情况下,您不应该删除密钥,除非您的应用中有某些特定的要求。你应该做的是:在应用启动时设置为每个键的默认值:

[[NSUserDefaults standardUserDefaults] registerDefaults:@{... : ...}]; 

这些默认值将是有效的应用程序正在运行一段时间,但不会被保存。如果您使用set...:forKey:方法和synchronize中的任何一种设置任何内容,则它们将覆盖默认值并保存。

+0

我想保存动态键值对,但我不知道密钥。我如何检索除首选项以外的所有键值对。 – user2677941

+0

你怎么能不知道密钥?使用单个密钥并存储该字典中包含您的神秘物品的字典。 – Wain

+0

我们可以选择除prefrence之外的所有键吗? – user2677941

0

通过调用此方法,您可以删除与您的应用程序相关联的所有内容NSUserDefaults

// remove entire user defaults 
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier]; 
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain]; 
[[NSUserDefaults standardUserDefaults] synchronize]; // not sure if needed, but never hurts 

这应该给你一个干净的石板,用于保存信息为用户默认值。

1

试试这个

- (NSDictionary *) dictionaryRepresentation。在标准用户默认值上使用此方法,您可以获取用户默认值中的所有键的列表。然后,您可以用它来清除用户默认设置:

NSUserDefaults * defs = [NSUserDefaults standardUserDefaults]; 
    NSDictionary * dict = [defs dictionaryRepresentation]; 
    for (id key in dict) { 
     [defs removeObjectForKey:key]; 
    } 
    [defs synchronize]; 

removeObjectForKey - 应该给你删除一个偏好的能力。

+0

我已经试过这个,它只删除添加的不是首选项的密钥。我有只有新增项目的键值对。我怎样才能做到这一点? – user2677941

+0

你是否尝试过这一个[NSUserDefaults resetStandardUserDefaults]; – Ravindhiran

+0

你能解释一下你得到的错误吗? – Ravindhiran