【问题标题】:nsuserdefault has key-values set how to delete it?nsuserdefault已经设置了key-values怎么删除呢?
【发布时间】: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。

标签: ios nsuserdefaults


【解决方案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

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

【讨论】:

    猜你喜欢
    • 2016-03-08
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多