Ios6 用户密钥链的奇怪行为

Ios6 用户密钥链的奇怪行为,ios6,keychain,Ios6,Keychain,在iOS上保存给用户的密钥链时,我试图调试一个奇怪的行为。我使用以下代码检查用户是否在钥匙链上: keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:KeyName accessGroup:nil]; if(keychainItem != NULL && [keychainItem objectForKey:(id)kSecValueData] != NULL && [[keychainIt

在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 = [[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(重新登录)之后,它实际上正在保存到密钥链。我能够输出它保存的内容


    然而,就在那之后,当我重新启动模拟器时…它显示它找不到用户名和密码!这毫无意义…

    我发现了这个问题。这是一个记忆问题。当屏幕移动时,
    keychainItem
    是正在解除分配的属性。我必须重新初始化它,因为我是在
    viewDidLoad
    函数中创建的,注销后没有调用该函数。案件结案