我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
然而在NSLog中,没有任何东西可以显示出您期望的价值.else块确实被执行了.有什么理由说这不是零吗?
valueForKey:在它搜索的所有地方都是一种复杂的方法.在处理默认值时,我发现使用getter获取特定数据类型更可靠.
if ([defaults boolForKey:kIdentifierKey]) [self doSomething];
Run Code Online (Sandbox Code Playgroud)
或者你可以使用objectForKey:它应该像你期望的那样返回nil.实际上,在创建NSLog语句时执行此操作.并且nil的字符串描述是@"",因此您的输出正如您所期望的那样.
此外,您正在测试和记录不同的密钥:
[defaults valueForKey:kIdentifierKey];
[defaults objectForKey:kGroupIdentifierKey];
Run Code Online (Sandbox Code Playgroud)
确保您正在测试并记录您的想法.
从新的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");
Run Code Online (Sandbox Code Playgroud)
它输出:
is not yet defined
is not yet defined
valueForKey is nil
objectForKey is nil
Run Code Online (Sandbox Code Playgroud)
我想你还有其他的东西在这里发生.
| 归档时间: |
|
| 查看次数: |
6246 次 |
| 最近记录: |