mac*_*sik 7 cocoa nsuserdefaults
我[NSUserDefaults registerDefaults:]在应用程序启动时通过调用注册了一堆首选项值.我需要在某个阶段用新的替换它们,但新值范围(键设置)小于初始值.所以在我[NSUserDefaults registerDefaults:]再次打电话之后,我有一些新的价值观,其中一些旧的未被替换.是否有可能删除以前注册的值?
Eth*_*anB 13
要完全替换已注册的默认值,您将替换NSRegistrationDomain域(顺便说一下,它是易失性的).
要删除单个注册的默认值,您将获取值NSRegistrationDomain,删除有问题的键,并替换域.
类别NSUserDefaults可能看起来像这样:
@implementation NSUserDefaults (UnRegisterDefaults)
- (void)unregisterDefaultForKey:(NSString *)defaultName {
NSDictionary *registeredDefaults = [[NSUserDefaults standardUserDefaults] volatileDomainForName:NSRegistrationDomain];
if ([registeredDefaults objectForKey:defaultName] != nil) {
NSMutableDictionary *mutableCopy = [NSMutableDictionary dictionaryWithDictionary:registeredDefaults];
[mutableCopy removeObjectForKey:defaultName];
[self replaceRegisteredDefaults:[mutableCopy copy]];
}
}
- (void)replaceRegisteredDefaults:(NSDictionary *)dictionary {
[[NSUserDefaults standardUserDefaults] setVolatileDomain:dictionary forName:NSRegistrationDomain];
}
@end
Run Code Online (Sandbox Code Playgroud)
动机:
我需要这个的原因是因为我想打开用户代理欺骗(出于第三方兼容性的原因).用户代理欺骗仅在通过设置值时才起作用registerDefaults:,因此set...:forKey:不会停止用户代理字符串.如果我想在一段时间后停止欺骗用户代理(不重新启动应用程序),我需要一种方法来删除默认值.此外,我不想清除我的应用程序用户的其他注册默认值.上述解决方案似乎完美地完成了这一点.
您可以使用removeVolatileDomainForName:来删除NSRegistrationDomain. 这将清除通过 注册的所有值registerDefaults:。但如果你需要这样做,你\xe2\x80\x99很可能做错了什么。正确的方法是使用其中一种set...:forKey:方法实际存储新设置。
| 归档时间: |
|
| 查看次数: |
1573 次 |
| 最近记录: |