gpt4 book ai didi

ios - 在 NSUserDefaults 中存储多个键值对

转载 作者:行者123 更新时间:2023-11-29 00:50:02 25 4
gpt4 key购买 nike

我正在 IOS (xcode 6.4) 中构建一个简单的登录和注册。为了保存用户名和密码,我使用了 NSUserDefaults。但问题是我无法存储多个用户名和密码,因为我将数据保存到同一个 key 。实现它的替代方法是什么。我在 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"];

关于ios - 在 NSUserDefaults 中存储多个键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38240341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com