2017-02-10 120 views
1

我正在使用蘋果KEychainItemWrapper.The鑰匙串第一次返回值(也是隻要應用程序處於活動狀態或後臺狀態),但鑰匙串返回nil當應用程序退出並再次打開。ios鑰匙串返回零值

我測試這兩個模擬器和device.I'm使用的是iOS 9.2.1和8.2.1的Xcode

鑰匙扣分享我的項目啓動和權利是正確的。我不確定我是否真的需要打開鑰匙串共享。通過關閉鑰匙串共享沒有任何區別。我仍然期待鑰匙串共享關閉時的相同行爲。

這裏是我現在的儲蓄和retriving值:

-(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

我發現的問題是我多次調用方法saveUSerInfoInKeychain:(NSString *)usrName andPAssworD:(NSString *)password

有時,無參數傳遞到此方法。因此,keychian將用零值覆蓋原始值。

我很笨,責怪鑰匙扣!