iphone - 如何使用 NSUserDefaults 正确工作(检索值)

标签 iphone objective-c cocoa cocoa-touch

我的代码中有一个简单的方法,如下所示:

- (BOOL)isFirstTimeLogin 
{
    NSString *t_gName = 
    [NSString stringWithFormat:@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:kGroupIdentifierKey]];
    if ([t_gName isEqualToString:@""] || t_gName == nil) {
        DLog(@"LoginViewController, m:::isFirstTimeLogin, First time login happening.");
        return YES;
    }

    DLog(@"LoginViewController, m:::isFirstTimeLogin, Not a first time login.");
    return NO;
}

简单来说,它所做的就是转到设置包,并从 PSTextFieldSpecifier 中检索一个值。如果我手动进入并添加一些任意文本,代码将按预期工作。但是,每当我第一次在新设备上安装该应用程序时,第一个条件执行为 false,它应该为 true。单步执行代码后,gdb 证明该对象确实也是 nil:

(gdb) po t_gName
(空)

我在这里可能做错了什么?为什么第一次安装应用程序时条件失败并且 t_gName 是空/空 PSTextFieldSpecifier。我什至尝试在我的设置包中添加一个空字符串的 DefaultValue。

最佳答案

[NSString stringWithFormat:@"%@", nil];

这会创建这样的东西:

@"(null)"

因此既不nil也不等于@""

顺便说一下

  1. 你根本不需要stringWithFormat:
  2. 不检查 string == nil 但检查 !string
  3. 您不必检查空字符串,因为有一组或者它是nil
  4. 使用比 t_gName 更好的名称,没有理由使用短名称。

像这样:

- (BOOL)isFirstTimeLogin 
{
    NSString *groupIdentifier = [[NSUserDefaults standardUserDefaults]
                                    objectForKey:kGroupIdentifierKey];
    if (!groupIdentifier) {
        DLog(@"First time login.");
        return YES;
    }

    DLog(@"Not a first time login.");
    return NO;
}

关于iphone - 如何使用 NSUserDefaults 正确工作(检索值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/603593/

相关文章:

objective-c - 无法将 NSNamedColorSpace 转换为 NSDeviceRGBColorSpace?

iphone - 我如何计算从我现在所在的位置到特定点的距离

iphone - 如何更改 Facebook 登录页面的语言?

iphone - UIImagePickerController 通过委托(delegate)更改相机源?

objective-c - 如何更改 "System Preferences > Keyboard > Modifier Keys..."中的修改键

objective-c - 多 View 应用程序的问题

objective-c - Objective-c 中的 IBOutlet

iphone - 如何无条件地将绿色添加图标放在插入行上

iphone - 是否可以使用 Xcode 4 为 IOS 4.0 编译 iPhone 应用程序

objective-c - 带凭据的 AFNetworking 上传任务(HTTP 基本身份验证)