【问题标题】:ios keychain return nil valueios钥匙串返回零值
【发布时间】:2017-02-10 15:10:25
【问题描述】:

我正在使用苹果 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];
}

我做错了什么?我可以多次使用相同的标识符初始化钥匙串吗?

【问题讨论】:

    标签: ios objective-c keychainitemwrapper


    【解决方案1】:

    我发现的问题是我不止一次调用方法saveUSerInfoInKeychain:(NSString *)usrName andPAssworD:(NSString *)password

    有时,nil 参数被传递到这个方法中。所以 keychian 正在用 nil 值覆盖原始值。

    责怪钥匙扣我太笨了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多