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”。
答案 0 :(得分: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"]);
}
答案 1 :(得分:0)
registerDefaults影响用户默认值的不同“级别”,而不是setObject:forKey:或removeObjectForKey。它进入全局用户默认值,这是一个高于标准用户默认值的级别。 “全球”是一个误称,因为它仍然是你的应用程序的本地。
使用此方法无法从全局用户默认值中删除值。
Global Defaults (NSGlobalDomain)
-> User Defaults (NSRegistrationDomain)
如果值在用户值中,则它将覆盖全局值。如果不是,则采用全局默认值。添加和删除值仅影响用户默认值级别。
显然你无法摆脱全局默认值,因为如果删除用户默认值,全局默认值将永远“闪耀”。但是您可以将要“替换为nil”的对象值设置为[NSNull null]
。然后在您的代码中,您将检查这种情况:默认值为nil或[NSNull null]
,它会告诉您该值未设置。