Objective c 如果我使用;“注册默认值”;要注册默认值,我不能删除我注册的默认值

Objective c 如果我使用;“注册默认值”;要注册默认值,我不能删除我注册的默认值,objective-c,nsuserdefaults,Objective C,Nsuserdefaults,日志: 为什么结果值“内容”?我想要结果值“nil”。registerDefaults影响的用户默认值“级别”与setObject:forKey:或removeObjectForKey不同。它进入全局用户默认值,该值高于标准用户默认值。“全球”是一个误称,因为它仍然是本地应用程序 无法使用此方法从全局用户默认值中删除值 全局默认值(NSGlobalDomain) ->用户默认值(NSRegistrationDomain) 如果值位于用户值中,则它将覆盖全局值。如果不是,则取全局默认值。添加和删除

日志:


为什么结果值“内容”?我想要结果值“nil”。

registerDefaults影响的用户默认值“级别”与setObject:forKey:或removeObjectForKey不同。它进入全局用户默认值,该值高于标准用户默认值。“全球”是一个误称,因为它仍然是本地应用程序

无法使用此方法从全局用户默认值中删除值

全局默认值(NSGlobalDomain)
->用户默认值(NSRegistrationDomain)

如果值位于用户值中,则它将覆盖全局值。如果不是,则取全局默认值。添加和删除值仅影响用户默认值级别


显然,您无法摆脱全局默认值,因为如果您删除用户默认值,全局默认值将始终“闪耀”。但是您可以将要“替换为nil”的对象值设置为
[NSNull null]
。然后在代码中检查这种情况:默认值为nil或
[NSNull null]
,这将告诉您该值未设置。

是的,您是正确的

这可能不是完美的解决方案,。但要解决这个问题,需要做一点小小的调整

如果你用这种方式,它的工作

2012-12-17 17:09:05.062 browserHD[4075:c07] content 

我使用resetStandardUserDefaults进行重置,但默认值仍然存在。谢谢。我知道如果我使用“setObject:”,它可以工作。但问题是我必须使用“registerDefaults:”。或者我可以更改我注册的值吗?请检查我的代码并更新我
2012-12-17 17:09:05.062 browserHD[4075:c07] content 
- (IBAction)set:(id)sender {
    NSMutableDictionary *aDict=[NSMutableDictionary new];
    [aDict setObject:_myText.stringValue forKey:@"key"];

    [[NSUserDefaults standardUserDefaults] registerDefaults:aDict];
}

- (IBAction)remove:(id)sender {
    NSMutableDictionary *aDict=[NSMutableDictionary new];
    [aDict setObject:@"null" forKey:@"key"];
    [[NSUserDefaults standardUserDefaults] registerDefaults:aDict];
}

- (IBAction)get:(id)sender {
    NSLog(@"-> %@",[[NSUserDefaults standardUserDefaults]objectForKey:@"key"]);
}