检查NSUserDefaults中是否存在用户名?

时间:2013-05-06 08:44:20

标签: iphone ios objective-c if-statement nsuserdefaults

我目前想检查NSUserDefaults中是否存在用户名,如果不存在我想加载模态视图控制器。问题是即使用户名为nil,它仍然表现得好像存在。这就是我所拥有的:

//Check if the login data exists
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"username"] != nil) {

        //Load Login View if no username is found
        NSLog(@"No username found");
        LoginViewController *loginView = [[LoginViewController alloc] init];
        [self presentViewController:loginView animated:YES completion:nil];
    }

    else {

        NSString *savedUsername = [defaults stringForKey:@"username"];
        NSLog(@"Username found: %@", savedUsername);

    }

我一直在我的NSLog中得到这个: Username found: (null)

任何帮助将不胜感激!

8 个答案:

答案 0 :(得分:10)

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"username"] == nil) {

        //Load Login View if no username is found
        NSLog(@"No username found");
        LoginViewController *loginView = [[LoginViewController alloc] init];
        [self presentViewController:loginView animated:YES completion:nil];
    }

    else {

        NSString *savedUsername = [defaults stringForKey:@"username"];
        NSLog(@"Username found: %@", savedUsername);

    }

答案 1 :(得分:3)

if ( ! [defaults objectForKey:@"username"] )

答案 2 :(得分:2)

您正在使用!= nil,这与您想要的相反。将您的第一个if语句更改为:

if ([defaults objectForKey:@"username"] == nil) {

或者只是:

if (![defaults objectForKey:@"username"]) {

答案 3 :(得分:2)

首先,从手机/模拟器中删除应用

enter image description here

将代码替换为,然后运行

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"username"] == nil) {

        //Load Login View if no username is found
        NSLog(@"No username found");

        //set the username,
       [defaults setObject:@"username_1" forKey:@"username"];

        LoginViewController *loginView = [[LoginViewController alloc] init];
        [self presentViewController:loginView animated:YES completion:nil];
    }

    else {

        NSString *savedUsername = [defaults stringForKey:@"username"];
        NSLog(@"Username found: %@", savedUsername);

    }



要知道
稍后为关键字“用户名”保存对象 这个条件总是返回false,

([defaults objectForKey:@"username"] == nil)

如果删除以前的安装。 UserDefaults会自动删除。 然后只有你可以尝试这是否正常([默认objectForKey:@“用户名”] ==无)

答案 4 :(得分:2)

您只需尝试此操作即可,无需使用nil

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

if (![defaults objectForKey:@"Username"]) {

} else {

}

答案 5 :(得分:1)

正如其他人已经指出的那样,你的测试

if ([defaults objectForKey:@"username"] != nil)

错了。但即使有了

if ([defaults objectForKey:@"username"] == nil)

如果用户默认值包含 不是字符串 的“用户名”值,则会出现问题。在这种情况下,objectforKey会返回一个值,但stringForKey会返回nil

因此,您应该只使用 stringForKey

NSString *savedUsername = [defaults stringForKey:@"username"];
if (savedUsername == nil) {
    //Load Login View if no username is found
    NSLog(@"No username found");
    // ...
} else {
    NSLog(@"Username found: %@", savedUsername);
}

答案 6 :(得分:0)

如果你对NULL和NIL感到困惑,你也可以使用这种方法: -

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

NSString*value=[prefs objectForKey:@"username"];

NSLog(@"useremail %@",value);

value=[value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

if ([value length]>0)
{


      NSString *savedUsername = [defaults stringForKey:@"username"];
    NSLog(@"Username found: %@", savedUsername);

}

else {

    NSLog(@"No username found");
    LoginViewController *loginView = [[LoginViewController alloc] init];
    [self presentViewController:loginView animated:YES completion:nil]; 
  }

答案 7 :(得分:0)

试试这种方式。

NSUserDefaults *Def = [NSUserDefaults standardUserDefaults];

    if (![Def objectForKey:@"Username"]) 
    {
       // Code 
    } 
    else
    {
       //Code
    }

这对你有帮助。