我正在使用苹果KEychainItemWrapper。钥匙串第一次返回值(并且只要应用程序处于活动状态或处于后台状态),但是当应用程序退出并再次打开时,钥匙串返回nil
我在模拟器和设备上测试了这个。我使用的是iOS 10.2.1和xcode 8.2.1
我的项目启用了钥匙串共享,且权利正确无误。我不确定我是否真的需要打开钥匙串共享。通过关闭钥匙串共享没有任何区别。我仍然在关闭钥匙串共享时遇到同样的行为。
以下是我如何保存和重新获取值:
-(void)saveUSerInfoInKeychain:(NSString *)usrName andPAssworD:(NSString *)password{
_keychain = [[KeychainItemWrapper alloc]initWithIdentifier:[[NSBundle mainBundle]bundleIdentifier] accessGroup:nil];
//also tried setting the accessible type
[_keychain setObject:(__bridge id)kSecAttrAccessibleAlways forKey:(__bridge id)kSecAttrAccessible];
//also set the accessgroup
[_keychain setObject:@"key.app.bndle.identifier"
forKey:(id)kSecAttrAccessGroup];
[_keychain setObject:usrName forKey:(id)kSecAttrAccount];
[_keychain setObject:password forKey:(id)kSecValueData];
}
-(NSString *)getUserEmail{
if (!_keychain) {
_keychain = [[KeychainItemWrapper alloc]initWithIdentifier:[[NSBundle mainBundle]bundleIdentifier] accessGroup:nil];
}
return [_keychain objectForKey:(id)kSecAttrAccount];
}
-(NSString *)getUserPassword{
if (!_keychain) {
_keychain = [[KeychainItemWrapper alloc]initWithIdentifier:[[NSBundle mainBundle]bundleIdentifier] accessGroup:nil];
}
return [_keychain objectForKey:(id)kSecValueData];
}
我做错了什么?我可以多次使用相同的标识符初始化钥匙串吗?
答案 0 :(得分:0)
我发现的问题是我不止一次调用方法saveUSerInfoInKeychain:(NSString *)usrName andPAssworD:(NSString *)password
。
有时候,nil params会传递给这种方法。所以keychian用nil值覆盖原始值。
我是如此愚蠢地责怪钥匙扣!