我正在尝试调试奇怪的行为,同时保存到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];
我注意到它适用于所有场景除外:
上面的代码片段有问题吗?我每次都可以在模拟器上重现这个,我不知道,因为我在网上关注教程。包括以下页面:
iOS: How to store username/password within an app?
[编辑]
我正在逐步通过断点,我确认在第3步(重新进入)之后,它实际上是保存到钥匙串。我能够输出它保存的内容。
然而,在我重新启动模拟器之后......它显示它找不到用户名和密码!这毫无意义......
答案 0 :(得分:0)
我发现了这个问题。这是一个记忆问题。当屏幕移动时,keychainItem
是一个被释放的属性。自从我在viewDidLoad
函数中创建以来,我不得不重新初始化它,该函数在注销后没有被调用。案件结案。