当前位置:  开发笔记 > IOS > 正文

iPhone SDK上的NSUserDefaults没有返回nil

如何解决《iPhoneSDK上的NSUserDefaults没有返回nil》经验,为你挑选了1个好方法。

我正在使用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块确实被执行了.有什么理由说这不是零吗?



1> Alex Wayne..:

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

我想你还有其他的东西在这里发生.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有