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)
我试图做的只是考虑不好的做法还是有一个简单的方法呢?
文档很清楚: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)
| 归档时间: |
|
| 查看次数: |
744 次 |
| 最近记录: |