我正在IOS(xcode 6.4)中建立一个简单的登录和注册。要保存用户名和密码,我正在使用NSUserDefaults。但是问题是我无法保存多个用户名和密码,因为我将数据保存到同一密钥中。实现它的另一种方法是什么。我在stackoverflow上看到了类似的问题,但无法理解解决方案。因此,任何人都可以轻松地进行解释。这是我的代码:

//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"];
    }
}

最佳答案

正如Simon所指出的那样,在NSUserDefaults中存储用户名和密码存在安全问题。但是,如果您仍然想这样做,那就很简单。

NSUserDefaults实际上只不过是plist而已,因此您可以在NSArray中存储根据NSDictionaryNSUserDefaults创建的任意复杂结构。因此,您可以执行以下操作:

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


请注意,您不能只更改一个帐户。如果需要更改或添加新帐户,则应阅读整个结构,将数组和字典转换为可变的变体,然后将其全部重新写入默认值。

更新

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"];

07-26 09:21
查看更多