2
NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:@"content", @"myKey", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"myKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"myKey"]);

日志 :

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

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

4

2 回答 2

2

是的,你是对的...

这可能不是完美的解决方案。但稍作调整即可解决问题。

如果您使用这种方式,它会起作用!

- (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"]);
}
于 2012-12-17T10:04:10.817 回答
0

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

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

Global Defaults (NSGlobalDomain) -> User Defaults (NSRegistrationDomain)

如果一个值在用户值中,那么它会覆盖全局值。如果不是,则采用 Global Defaults 中的值。添加和删​​除值仅影响用户默认值级别。

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

于 2012-12-17T09:51:36.900 回答