[英]Store multiple key-value pair in NSUserDefaults
I am building a simple login and registration in IOS (xcode 6.4). 我正在IOS(xcode 6.4)中建立一个简单的登录和注册。 To save username and password i am using NSUserDefaults
. 要保存用户名和密码,我正在使用NSUserDefaults
。 But the problem is I Can't store multiple username and passwords since I am saving data to same key.What's the alternate method to implement it.I saw some similar questions on stackoverflow but couldn't understand the solution. 但是问题是我无法保存多个用户名和密码,因为我将数据保存到同一密钥中。实现它的另一种方法是什么。我在stackoverflow上看到了类似的问题,但无法理解解决方案。 So can anyone explain in easy way. 因此,任何人都可以轻松地进行解释。 HEre is my code: 这是我的代码:
//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"];
}
}
As pointed out by Simon, there are security issues storing usernames and passwords in NSUserDefaults
. 正如Simon所指出的那样,在NSUserDefaults
存储用户名和密码存在安全问题。 If you still want to do it however, it is quite simple. 但是,如果您仍然想这样做,那就很简单。
NSUserDefaults
is really not much more then a plist
so you can store arbitrary complex structures created from NSArray
and NSDictionary
in NSUserDefaults
. NSUserDefaults
实际上只是一个plist
NSUserDefaults
因此您可以在NSUserDefaults
存储从NSArray
和NSDictionary
创建的任意复杂结构。 So you can do something like: 因此,您可以执行以下操作:
NSArray<NSDictionary*>* accounts = @[@{
@"username" : @"firstUsername",
@"password" : @"firstPassword"
}, @{
@"username" : @"secondUsername",
"password" : @"secondPassword"
}];
[[NSUserDefaults standardUserDefaults] setObject: accounts forKey:@"accounts"];
Note that you can't change one account only; 请注意,您不能只更改一个帐户。 if you need to change or add a new account, you should read the whole structure, convert the array and the dictionaries to mutable variants, and re-write it to the defaults all together. 如果需要更改或添加新帐户,则应阅读整个结构,将数组和字典转换为可变的变体,然后将其全部重新写入默认值。
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"];
You can simple save your password as object of key username, some think like: 您可以简单地将密码另存为密钥用户名的对象,有些人会这样想:
- (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"];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.