0

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

//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)

任何帮助,将不胜感激!

4

8 回答 8

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);

    }
于 2013-05-06T08:48:28.453 回答
3
if ( ! [defaults objectForKey:@"username"] )
于 2013-05-06T08:47:04.857 回答
2

首先,从您的手机/模拟器中删除该应用程序

在此处输入图像描述

用这个替换代码,然后运行

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 会自动被删除。那么只有你可以尝试这是否有效([defaults objectForKey:@"username"] == nil)

于 2013-05-06T09:01:10.237 回答
2

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

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

要不就:

if (![defaults objectForKey:@"username"]) {
于 2013-05-06T08:51:26.777 回答
2

您可以简单地尝试一下,无需使用nil.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

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

} else {

}
于 2013-05-06T09:03:18.760 回答
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);
}
于 2013-05-06T09:08:48.673 回答
0

试试这个方法。

NSUserDefaults *Def = [NSUserDefaults standardUserDefaults];

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

这真的会帮助你。

于 2013-05-06T09:15:16.607 回答
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]; 
  }
于 2013-05-06T09:04:38.183 回答