iOS从钥匙串登录框中恢复密码

Ada*_*hns 0 iphone objective-c keychain ios keychainitemwrapper

我将用户名/密码保存到钥匙串,如下所示:

KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];

[keychainItem setObject:usernameField.text forKey:(__bridge id)(kSecAttrAccount)];
[keychainItem setObject:passwordField.text forKey:(__bridge id)(kSecValueData)];
Run Code Online (Sandbox Code Playgroud)

然后我检索用户名密码:

NSString *username = [keychainItem objectForKey:(__bridge id)(kSecAttrAccount)];
NSString *password = [keychainItem objectForKey:(__bridge id)(kSecValueData)];
Run Code Online (Sandbox Code Playgroud)

然后我想自动将它们放在用户名和密码登录框中,如果用户选中了那么记住我:

if ([_rememberMeSwitch isOn]) {
    usernameField.text = username;
}

if ([_rememberMeSwitch isOn]) {
    passwordField.text = password;
}
Run Code Online (Sandbox Code Playgroud)

这适用于用户名,但密码显然是作为nscfdata保存在钥匙串中,因为当我尝试在passwordField.text中插入密码时,我得到:

[__NSCFData _encodingCantBeStoredInEightBitCFString]: unrecognized selector sent to instance
Run Code Online (Sandbox Code Playgroud)

我试图做的只是考虑不好的做法还是有一个简单的方法呢?

Dai*_*jan 5

文档很清楚:kSecValueData应该是NSData/CFDataRef =>所以你必须将你的字符串转换为数据

存储它

将密码文本转换为NSData

NSData *pwdData = [passwordField.text dataUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

阅读它

将NSData转换为您的密码

NSData *pwdData = [keychainItem objectForKey:(__bridge id)(kSecValueData)];
NSString *password = [[NSString alloc] initWithData:pwdData encoding:NSUTF8StringEncoding];
passwordField.text = password;
Run Code Online (Sandbox Code Playgroud)