2016-07-07 12 views
0

Ich baue eine einfache Anmeldung und Registrierung in IOS (xcode 6.4). Um Benutzernamen und Passwort zu speichern, verwende ich NSUserDefaults. Aber das Problem ist, ich kann nicht mehrere Benutzernamen und Passwörter speichern, da ich Daten in den gleichen Schlüssel speichern. Was ist die alternative Methode, um es zu implementieren. Ich sah einige ähnliche Fragen auf Stackoverflow aber konnte die Lösung nicht verstehen. So kann man es auf einfache Weise erklären. Hier ist mein Code:Speichern mehrerer Schlüssel-Wert-Paare in NSUserDefaults

//function for login pressed 
- (IBAction)login:(UIButton *)sender 
{ 
    NSLog(@"%@,%@",userNameField.text,passwordField.text); 

    username = [[NSUserDefaults standardUserDefaults] objectForKey:@"username"]; 
    password = [[NSUserDefaults standardUserDefaults] objectForKey:@"password"]; 
    NSLog(@"%@,%@",username,password); 
    bool validUser = [username isEqualToString:userNameField.text]; 
    bool validPassword = [password isEqualToString:passwordField.text]; 

    if ([self checkWhetherFieldIsEmpty:userNameField.text :passwordField.text]) 
    { 
     [self displayAlert:@"All Fileds are mandatory"]; 
    } 
    else if(validUser && validPassword) 
    { 
     [self displayAlert:@"Successfull Login"] ; 
    } 
    else{ 
     // NSLog(@"Invalid username or password"); 
     [self displayAlert:@"Invalid login or password"]; 
    } 

} 

//function when register button is pressed 
- (IBAction)register:(UIButton *)sender 
{ 
    if([[[NSUserDefaults standardUserDefaults] objectForKey:@"username"] isEqualToString:userNameField.text]) 
    { 
     [self displayAlert:@"User already exist"]; 
     userNameField.text = @""; 
     passwordField.text = @""; 
    } 
    else 
    { 
     [[NSUserDefaults standardUserDefaults] setObject:userNameField.text forKey:@"username"]; 
     [[NSUserDefaults standardUserDefaults] setObject:passwordField.text forKey:@"password"]; 
     [[NSUserDefaults standardUserDefaults]synchronize]; 
     NSLog(@"user Created successfully"); 
     [self displayAlert:@"Registration Successfull"]; 
    } 
} 
+2

NICHT NSUserDefaults Verwenden Sie ein Passwort zu speichern, ist es nicht sicher ist. Verwenden Sie den Schlüsselbund, um solche Daten zu speichern. –

+0

@SimonMcLoughlin Ich weiß es. Aber ich versuche zu lernen mit NSUserDefaults –

+0

Für diejenigen, die sich Sorgen über Passwörter, nur als allgemeine Frage zum Speichern mehrerer Datenpaare in Benutzer-Standardeinstellungen. – Avi

Antwort

1

Wie Simon wies darauf hin, gibt es Sicherheitsprobleme Benutzernamen und Passwörter in NSUserDefaults speichern. Wenn Sie es dennoch tun wollen, ist es ganz einfach.

NSUserDefaults ist wirklich nicht viel mehr als ein plist so können Sie beliebige komplexe Strukturen aus NSArray und NSDictionary in NSUserDefaults erstellt speichern. So können Sie etwas tun wie:

NSArray<NSDictionary*>* accounts = @[@{ 
    @"username" : @"firstUsername", 
    @"password" : @"firstPassword" 
}, @{ 
    @"username" : @"secondUsername", 
    "password" : @"secondPassword" 
}]; 
[[NSUserDefaults standardUserDefaults] setObject: accounts forKey:@"accounts"]; 

Beachten Sie, dass Sie nur ein Konto ändern können; Wenn Sie ein neues Konto ändern oder hinzufügen müssen, sollten Sie die gesamte Struktur lesen, das Array und die Wörterbücher in veränderbare Varianten konvertieren und sie alle zusammen in die Standardwerte schreiben.

UPDATE

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
NSMutableArray* mutableAccounts = [[defaults objectForKey:@"accounts"] mutableCopy]; 
// Add or remove accounts: 
[mutableAccounts addObject:@{ @"username" : @"newAccount", @"password" : @"newPassword" }]; 
[mutableAccounts removeObjectAtIndex:0]; 
[defaults setObject:mutableAccounts forKey:@"accounts"]; 
+0

Wie das geht.Ich bin Neuling zu IOS so kann mehr erklären –

+0

Ich aktualisierte die Antwort mit einem Beispiel. Weitere Informationen finden Sie in der Klassenreferenz von NSMutableArray und NSMutableDictionary. – MrTJ

0

Sie einfach Ihr Passwort als Objekt der Schlüssel Benutzernamen speichern können, denken einige, wie:

- (IBAction)login:(UIButton *)sender { 

    NSLog(@"%@,%@",userNameField.text,passwordField.text); 

    NSString *password = userNameField.text.length > 0? [[NSUserDefaults standardUserDefaults] objectForKey:userNameField.text] : nil; 
    bool validUser = passwordField.text.length > 0 ? [passwordField.text isEqualToString:password] : NO; 

    if ([self checkWhetherFieldIsEmpty:userNameField.text :passwordField.text]) { 
     [self displayAlert:@"All Fileds are mandatory"]; 
    } 

    else if(validUser){ 

     [self displayAlert:@"Successfull Login"] ; 


    } 

    else{ 
     // NSLog(@"Invalid username or password"); 
     [self displayAlert:@"Invalid login or password"]; 
    } 

} 

//function when register button is pressed 
- (IBAction)register:(UIButton *)sender { 
    //TODO: need check userNameField passwordField is not nil here 
    if([[[NSUserDefaults standardUserDefaults] objectForKey:userNameField.text] length] > 0){ 
     [self displayAlert:@"User already exist"]; 
     userNameField.text = @""; 
     passwordField.text = @""; 

    } 
    else { 
     [[NSUserDefaults standardUserDefaults] setObject:passwordField.text forKey:userNameField.text]; 
     [[NSUserDefaults standardUserDefaults]synchronize]; 
     NSLog(@"user Created successfully"); 
     [self displayAlert:@"Registration Successfull"]; 
    } 
} 
Verwandte Themen