2017-06-07 1 views
0

Je suis nouveau dans iOS, Object-C et j'essaie de faire un login/registerLogin simple en utilisant NSUserDefaults.NSUserDefaults: Comment obtenir de la valeur

Mon problème est: Comment puis-je accéder/obtenir la valeur enregistrée dans NSUserDefaults pour vérifier si un utilisateur existe déjà?

C'est le code pour l'enregistrement d'un nouvel utilisateur:

-(void)registerNewUser { 

// Getting username and the password 
NSString *newUsername = self.usernameRegisterTextField.text; 
NSString *newPassword = self.passwordRegisterTextField.text; 

// Using NSUserDefaults to storage username and password 
NSUserDefaults *newUser = [NSUserDefaults standardUserDefaults]; 

[newUser setObject:newUsername forKey:@"username"]; 
[newUser setObject:newPassword forKey:@"password"]; 
[newUser setBool:YES forKey:@"registered"]; 

[newUser synchronize]; 

[self performSegueWithIdentifier:@"registerSucessSegue" sender:nil]; 

}

Et je suis en train d'obtenir la valeur enregistrée dans NSUserDefaults pour vérifier si un utilisateur existe déjà au lieu d'appeler l'écran de connexion nouveau:

- (IBAction)productTableButton:(id)sender { 
// Verification if an user exist 
NSUserDefaults *newUser = [NSUserDefaults standardUserDefaults]; 

BOOL newUserExist = [newUser valueForKey:@"registered"]; 

if (newUserExist == YES) { 
    [self performSegueWithIdentifier:@"productSegue" sender:nil]; 
} else { 
    [self performSegueWithIdentifier:@"loginSegue" sender:nil]; 
} 

}

y at-il quelque chose g que je fais mal quand j'essaie d'accéder à la valeur d'un utilisateur enregistré dans NSUserDefaults?

+1

Ne jamais utiliser 'valueForKey' pour obtenir un' BOOL', btw ne jamais utiliser '' valueForKey' de toute façon avec NSUserDefaults'. Il y a 'boolForKey' – vadian

Répondre

2

Oui. valueForKey renvoie des objets, pas des types de données primitifs comme BOOL. Pour NSUserDefaults, le moyen le plus court pour obtenir une valeur BOOL consiste à utiliser boolForKey à la place.

-1

Vous pouvez toujours vérifier objectForKey, qui est sûr à utiliser pour tout type qui pourrait être associé à votre clé.

Si la clé a été précédemment définie, elle renverra un id; sinon, il reviendra à zéro. Si c'est un booléen, vous obtiendrez un NSNumber qui peut facilement être converti.

id someKey = [[NSUserDefaults standardUserDefaults] objectForKey:@"Key"]; 
if(someKey) 
{ 
    //User exists 
} 
else 
{ 
    //User doesn't exist 
} 
+0

" objectForKey, qui est sûr à utiliser pour tout type qui pourrait être associé à votre clé. " Désolé, c'est incorrect. objectForKey ne fonctionne que pour les objets, pas pour les types de données primitifs comme BOOL. – moonman239

+0

Idk pourquoi les gens downvoted cette réponse. Cette réponse répond à la question de l'OP. Il voulait savoir comment vérifier si un utilisateur existe et cela peut être fait en vérifiant si cette clé existe dans userdefaults, ce qui est le cas de cette réponse. – GeneCode

+0

@ moonman239 Les données primitives telles que BOOL et int, etc. sont toutes stockées sous NSNumbers, car les NSDictionaries ne peuvent pas gérer les primitives. ObjectForKey fonctionne en effet dans ce cas; la seule différence est que boolForKey effectue automatiquement la conversion de NSNumber en BOOL pour vous. C'est la manière acceptée de faire ceci: https://stackoverflow.com/questions/4635106/check-key-exists-in-nsdictionary – David

-1

Essayez d'obtenir la valeur en utilisant boolForKey:

BOOL newUserExist = [defaults boolForKey:@"registered"];