nsuserdefault已经设置了key-values怎么删除呢?

Posted

技术标签:

【中文标题】nsuserdefault已经设置了key-values怎么删除呢?【英文标题】:nsuserdefault has key-values set how to delete it? 【发布时间】:2013-09-16 12:00:05 【问题描述】:

我已经尝试在应用程序启动时删除所有键值对,并在我检查键时再次删除这些键,这些键保存在 NSUserDefault 中。我已经存储了这些首选项。

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


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

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

请帮我解决这个问题。

提前致谢

【问题讨论】:

为什么要删除不属于您的偏好设置? 我想检查是否在 NSUserDefaults 中插入了值。如果不删除这些首选项,我该怎么办?请提出建议。 如果你测试一个对象,如果它未设置,字典将返回 nil。 【参考方案1】:

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

一般来说,除非您的应用中有特定要求,否则您不应删除密钥。您应该做的是在应用启动时为每个键设置默认值:

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

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

【讨论】:

我想保存动态键值对,但我不知道键。如何检索除首选项之外的所有键值对.. 你怎么会不知道钥匙呢?使用一个键并存储一个字典,该字典包含您的神秘项目。 我们可以选择除首选项之外的所有键吗? 如果您为每个键添加前缀,那么您可以在迭代期间进行检查。【参考方案2】:

试试这个

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

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

removeObjectForKey -- 这应该使您能够删除首选项。

【讨论】:

我已经尝试过了,它只会删除添加的键而不是首选项。我只有新添加的项目的键值对。我该怎么做? 你试过这个[NSUserDefaults resetStandardUserDefaults]; 首选项没有从上面的代码中删除,当我检查存储在 NSUserDefault 中的所有键时,仍然存在:键(NSLanguages、AppleITunesStoreItemKinds、AppleLocale、AppleLanguages、NSInterfaceStyle)。我有键值对,我不知道键,我的主要问题是如何访问这些键??【参考方案3】:

您可以通过调用此函数来删除 NSUserDefaults 中与您的应用关联的所有内容。

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

这应该为您将信息保存到用户默认设置提供了一个干净的状态。

【讨论】:

以上是关于nsuserdefault已经设置了key-values怎么删除呢?的主要内容,如果未能解决你的问题,请参考以下文章

NSUserDefaults 未在 IOS4 中加载

在 NSUserDefault 中保存 NSMutableArray 给出 nil

自动命名 NSUserDefaults

设置 NSUserDefault 崩溃

通过 plist 覆盖 NSUserDefaults 值

如何为 NSUserDefault Keys 设置初始值?