gpt4 book ai didi

cocoa - 如何删除之前通过 [NSUserDefaults registerDefaults :] call 注册的值

转载 作者:行者123 更新时间:2023-12-03 16:07:03 26 4
gpt4 key购买 nike

我在应用程序启动时通过 [NSUserDefaults registerDefaults:] 调用注册了一堆首选项值。我需要在某个阶段用新值替换它们,但新值范围(键集)小于初始值范围。因此,在我再次调用 [NSUserDefaults registerDefaults:] 后,我得到了新值和一些未替换的旧值。是否可以删除以前注册的值?

最佳答案

要完全替换注册的默认值,您将替换 NSRegistrationDomain 域(顺便说一句,该域是不稳定的)。

要删除单个注册的默认值,您可以获取 NSRegistrationDomain 中的值,删除有问题的 key ,然后替换域。

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

动机:

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

关于cocoa - 如何删除之前通过 [NSUserDefaults registerDefaults :] call 注册的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3676235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com