我有存储用户名和密码的数组。我的数组结构如下
Array: (
{
password = 123;
username = sam;
},
{
password = 123456;
username = 123;
},
{
password = david123;
username = David;
}
)
当我点击登录按钮时,我想检查我的用户名文本框中的文本是否等于数组中的用户名。任何人都可以在这个问题上帮助我
提前致谢
答案 0 :(得分:3)
我强烈建议您考虑不同的设计。以明文形式存储密码至少已经过时了三十年:人们很容易恢复用户的iPhone或iPhone的iTunes备份并读取所有密码。一个用户也可以轻松阅读其他人的密码。
根据您需要使用密码的方式,请考虑以下选项之一:
如果您不需要知道密码(例如,您只是在手机上进行本地访问控制),那么hash the password and store the hash。而不是您在问题中提出的数组,使用字典:
{ “sam”:“HASH(salt1 +密码)”, “david”:“HASH(salt2 + letmein)”, ... “otheruser”:“HASH(saltN + supersecret)” };
因此您不需要像其他地方一样提出的复杂的循环数组,只需查找[dict objectForKey: userName]
,如果获得nil
,则表示您没有有效的用户名。
答案 1 :(得分:1)
如果您的用户名和密码作为对象存储在数组中,那么这样就可以了。
BOOL correctUsername = NO;
for (int i =0; i < usernameArray.count; i++) {
CustomObject *tempObj = [usernameArray objectAtIndex:i];
if (tempObj.userName == textFld.text) {
correctUsername = YES;
}
}
如果您的用户名和密码分别存储在数组中,那么您必须在for循环中跳过2而不是一个才能获得用户名。不是最好的方式。最好的方法是对象方式。
答案 2 :(得分:0)
使用NSPredicate
。
NSPredicate *predicate;
predicate = [NSPredicate predicateWithFormat:@"username LIKE [cd] %@", textField.text];
NSArray *result = [array filteredArrayUsingPredicate:predicate];
if ([result count] > 1) {
// User Exists
}