2017-02-10 15 views
1

私はapple KEchainItemWrapperを使用しています。キーチェーンは初めて値を返します(また、アプリケーションがアクティブまたはバックグラウンド状態になっている限り)が、キーチェーンはnilを返しています終了し、再び開きます。ios keychain return nil value

私はiOSの10.2.1とXcode 8.2.1

キーホルダー共有を使用して、両方のシミュレータ上とdevice.I'mでこれをテストしたが、私のプロジェクトで有効になっていると資格が正しいです。キーチェーンの共有を有効にする必要があるかどうかはわかりません。キーチェーンの共有をオフにしても何の違いもありませんでした。私はキーチェーンの共有を無効にして同じ動作を行っています。私は間違って

-(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]; 
} 

は何をやっている:ここで

は、私は値を保存し、retrivingていますどのようにでしょうか?同じ識別子で複数回キーチェーンを初期化できますか?

答えて

0

私が見つけた問題は、メソッドsaveUSerInfoInKeychain:(NSString *)usrName andPAssworD:(NSString *)passwordを複数回呼び出すことです。

時には、nilパラメータがこのメソッドに渡されます。したがってkeychianは元の値をnil値で上書きしています。

私はキーチェーンを非難するためにとても愚かです!

関連する問題