如何删除之前通过[NSUserDefaults registerDefaults:]调用注册的值 [英] How can I remove value that was previously registered via [NSUserDefaults registerDefaults:] call

查看:200
本文介绍了如何删除之前通过[NSUserDefaults registerDefaults:]调用注册的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一堆偏好值通过 [NSUserDefaults registerDefaults:] 注册应用程序启动时调用。我需要在一些阶段用新的替换他们,但新的值范围(键集)比起初始的。所以在我调用 [NSUserDefaults registerDefaults:] 后,我有一些旧的,没有替换的新值。是否可以删除以前注册的值?

I have bunch of preference values registered via [NSUserDefaults registerDefaults:] call on application startup. I need to replace them at some stage with new ones but new values scope (keys set) is less than initial one. So after I call [NSUserDefaults registerDefaults:] again I have new values with some old that weren't replaced. Is there a possibility to remove previously registered values?

推荐答案

要完全替换注册的默认值将替换 NSRegistrationDomain 域(顺便说一下,它是易失的)。

To completely replace the registered defaults, you will replace the NSRegistrationDomain domain (which is volatile, by the way).

默认值,您会得到 NSRegistrationDomain 中的值,删除违规的关键字,并替换域。

To remove individual registered defaults, you get the values in the NSRegistrationDomain, remove the offending key(s), and replace the domain.

NSUserDefaults 上的类别可能如下所示:

A category on NSUserDefaults might look something like this:

@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

动机: / strong>

Motivation:

我需要的原因是因为我想开启用户代理欺骗(由于第三方兼容性的原因)。用户代理欺骗只有在通过 registerDefaults:设置值时才会工作,因此 set ...:forKey:不会停止user-agent字符串。如果我想停止欺骗用户代理一段时间后(不重新启动应用程序),我需要一种方法来删除默认值。此外,我不想清除其他注册的默认值我的应用程序用户。上述解决方案似乎完美实现了这一点。

The reason I need this is because I want to turn on user-agent spoofing (for reasons of 3rd-party compatibility). User-agent spoofing only appears to work when the value is set via registerDefaults:, so set...:forKey: won't stop the user-agent string it. If I want to stop spoofing the user-agent some time later (without restarting the app), I need a way to remove defaults. Further, I don't want to clear the other registered defaults my app users. The above solution appears to accomplish this perfectly.

这篇关于如何删除之前通过[NSUserDefaults registerDefaults:]调用注册的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆