在我以前版本的应用程序(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很难恢复,所以我问这个问题。现在我无法在此更改后恢复错误。
谢谢