2013-05-06 40 views
0

我目前想检查用户名是否存在于NSUserDefaults中,如果它不是我想加载模态视图控制器。问题是即使用户名是零,它仍然存在。下面是我有:检查用户名是否存在于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)

任何帮助,将不胜感激!

+1

if(![default objectForKey:@“Username”]) – Buntylm 2013-05-06 08:47:23

+0

您是否有机会在userDefaults中将[[NSNull null]]设置为用户名? – Anupdas 2013-05-06 08:49:24

+0

@BuntyMadan请输入它作为答案,因为你先写它,它的工作。意义非常重大。 – KingPolygon 2013-05-06 08:51:28

回答

2

你可以简单地试试这个没有必要使用nil

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

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

} else { 

} 
+0

我们不想写出答案,因为只有1个提示就够了,这就是为什么我写评论首先顺便说一句,所有的都是最好的,明亮的这么好运气年轻的男人..! – Buntylm 2013-05-06 09:15:31

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

也没有任何意义。除了NULL应该用于objc环境中的C++代码之外,Nil和NULL几乎相同,并且nil应该用于objc对象。 – 2013-05-06 08:47:45

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

    } 
+0

没有任何意义 – 2013-05-06 08:48:46

+3

它!看到要求。 – Unnati 2013-05-06 08:51:55

+0

你是否尝试过这种@ art-divin? – 2013-05-06 08:57:11

2

您正在使用!= nil这是你想的正好相反。改变你的第一个if语句:

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

或者只是:

if (![defaults objectForKey:@"username"]) { 
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:@“用户名”] ==无)

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]; 
    } 
1

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

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

是错误的。但即使有

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

你有一个问题,如果用户默认值包含“用户名”,也就是不是字符串的值。在这种情况下,objectforKey返回一个值,但返回nil

因此,你应该使用只有

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

尝试这种方式。

NSUserDefaults *Def = [NSUserDefaults standardUserDefaults]; 

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

这会真的帮到你。

相关问题