我正在使用NSUserDefaults作为设置应用程序.这是一个原始副本,我没有为这个特定设置添加任何文件系统.我希望它是零,但恰恰相反..
如果我执行以下操作:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ( [defaults valueForKey:kIdentifierKey] == nil ) { return YES; } else { NSLog(@"we have a value. return NO. Value is: %@", [defaults objectForKey:kIdentifierKey]); return NO; }
然而在NSLog中,没有任何东西可以显示出您期望的价值.else块确实被执行了.有什么理由说这不是零吗?
valueForKey:在它搜索的所有地方都是一种复杂的方法.在处理默认值时,我发现使用getter获取特定数据类型更可靠.
if ([defaults boolForKey:kIdentifierKey]) [self doSomething];
或者你可以使用objectForKey:它应该像你期望的那样返回nil.实际上,在创建NSLog语句时执行此操作.并且nil的字符串描述是@"",因此您的输出正如您所期望的那样.
此外,您正在测试和记录不同的密钥:
[defaults valueForKey:kIdentifierKey]; [defaults objectForKey:kGroupIdentifierKey];
确保您正在测试并记录您的想法.
从新的iPhone项目测试:
if (![[NSUserDefaults standardUserDefaults] valueForKey:@"foobar"]) NSLog(@"is not yet defined"); if (![[NSUserDefaults standardUserDefaults] objectForKey:@"foobar"]) NSLog(@"is not yet defined"); if ([[NSUserDefaults standardUserDefaults] valueForKey:@"foobar"] == nil) NSLog(@"valueForKey is nil"); if ([[NSUserDefaults standardUserDefaults] objectForKey:@"foobar"] == nil) NSLog(@"objectForKey is nil");
它输出:
is not yet defined is not yet defined valueForKey is nil objectForKey is nil
我想你还有其他的东西在这里发生.