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怎么删除呢?的主要内容,如果未能解决你的问题,请参考以下文章