3

在我以前版本的应用程序(iPhone)中,我在以下代码中的钥匙串中保留了值(密码):

KeychainItemWrapper * keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest" 
                                                                     accessGroup:nil];

[keychain setObject: kSecAttrAccessibleWhenUnlocked forKey:(id)kSecAttrAccessible];

[keychain setObject: @ "MySuperSecretPassword" forKey:(id)kSecValueData];

[keychain release];

并在以下代码中获取值:

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest" 
                                                                    accessGroup:nil];

[keychain setObject: kSecAttrAccessibleWhenUnlocked forKey:(id)kSecAttrAccessible];

NSString *key = [keychain objectForKey:(id)kSecValueData];

因为有时我的应用程序在后台运行,我发现了一个错误,我无法从钥匙串中获得我的价值。

我通过将 kSecAttrAccessible 的值从 kSecAttrAccessibleWhenUnlocked 更改为 kSecAttrAccessibleAlways 来修复该错误。

KeychainItemWrapper * keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest" 
                                                                 accessGroup:nil];
[keychain setObject:kSecAttrAccessibleAlways forKey:kSecAttrAccessible];

[keychain setObject: @"MySuperSecretPassword" forKey: kSecValueData];
 
[keychain release];

和:

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest" 
                                                                    accessGroup:nil];

    [keychain setObject: kSecAttrAccessibleAlways forKey:(id)kSecAttrAccessible];

    NSString *key = [keychain objectForKey:(id)kSecValueData];

我的问题是:如果此更改也有助于用户保存以前版本中的值。

我的bug很难恢复,所以我问这个问题。现在我无法在此更改后恢复错误。

谢谢

4

0 回答 0