2013-05-06 13 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

+0

Вы случайно устанавливаете '[NSNull null]' как имя пользователя в userDefaults? – Anupdas

+0

@BuntyMadan Пожалуйста, введите это как ответ, так как вы написали его первым, и это сработало. Делает так много смысла. – KingPolygon

ответ

2

Вы не можете просто попробовать это нет необходимости использовать nil.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

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

} else { 

} 
+0

Все вы, я не хочу писать ответ, так как всего лишь одного намека было достаточно, поэтому я написал комментарий. Сначала, между прочим, все лучше и ярче, так хорошо удачи Young man ..! – Buntylm

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

тоже не имеет никакого смысла. Nil и NULL почти одинаковы, за исключением того, что NULL следует использовать для кода C++ в среде objc, а nil следует использовать для объектов objc. –

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

не имеет никакого смысла –

+3

он! см. требование. – Unnati

+0

Вы попробовали это @ art-divin? –

2

Вы используете != nil, который является противоположностью того, что вы хотите. Измените ваш первый, если заявление:

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

    } 



Хорошо знать:
После того, как вы сохраните объект для ключа "имя пользователя", позже это условие всегда возвращает ложь,

([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 
    } 

Это действительно поможет вам.