在数组中搜索字符串,然后在iphone中的textview中显示

时间:2011-06-21 10:12:53

标签: iphone objective-c ios

我有存储用户名和密码的数组。我的数组结构如下

Array: (
        {
        password = 123;
        username = sam;
    },
        {
        password = 123456;
        username = 123;
    },
        {
        password = david123;
        username = David;
    }
)

当我点击登录按钮时,我想检查我的用户名文本框中的文本是否等于数组中的用户名。任何人都可以在这个问题上帮助我

提前致谢

3 个答案:

答案 0 :(得分:3)

我强烈建议您考虑不同的设计。以明文形式存储密码至少已经过时了三十年:人们很容易恢复用户的iPhone或iPhone的iTunes备份并读取所有密码。一个用户也可以轻松阅读其他人的密码。

根据您需要使用密码的方式,请考虑以下选项之一:

  • 如果应用程序必须知道密码(例如,针对Web服务进行身份验证),请在Keychain中存储凭据。使用每个钥匙串项的“account”属性来存储用户名。您搜索有效的用户名后,只需在钥匙串中搜索帐户属性中具有匹配值的项目。
  • 如果您不需要知道密码(例如,您只是在手机上进行本地访问控制),那么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
}