我试图调试一个奇怪的行为,同时保存到 iOS 上的用户钥匙串。我正在使用下面的代码来检查用户是否在钥匙串上:
keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:KeyName accessGroup:nil];
if(keychainItem != NULL && [keychainItem objectForKey:(id)kSecValueData] != NULL && [[keychainItem objectForKey:(id)kSecValueData] length] > 0 &&
[keychainItem objectForKey:(id)kSecAttrAccount] != NULL && [[keychainItem objectForKey:(id)kSecAttrAccount] length] > 0) {
txtPassword.text = [keychainItem objectForKey:(id)kSecValueData];
txtLogin.text = [keychainItem objectForKey:(id)kSecAttrAccount];
// Call webservice to login
[self btnPressedLogin:nil];
}
我正在使用以下内容保存到钥匙串:
[keychainItem setObject:KeyName forKey: (id)kSecAttrService];
[keychainItem setObject:txtLogin.text forKey:(id)kSecAttrAccount];
[keychainItem setObject:txtPassword.text forKey:(id)kSecValueData];
当用户注销时,我只需执行以下操作:
[keychainItem resetKeychainItem];
我注意到它适用于所有情况,除了:
- 我登录(手动输入用户名/密码)
- 登出
- 我登录(手动输入用户名/密码)
- 重启模拟器
- 它没有按应有的方式自动登录
我上面的代码片段有问题吗?我每次都能在模拟器上重现这个,我不知道,因为我在网上学习教程。包括以下页面:
[编辑]
我正在单步执行断点,并确认在第 3 步(重新登录)之后,它实际上是保存到钥匙串中。我能够输出它保存的内容。
但是,在那之后,当我重新启动模拟器时……它显示它找不到用户名和密码!这没有任何意义...