2011-08-10 91 views
0

我用的是常見的鑰匙鏈的包裝從這裏: iOS: How to store username/password within an app?鑰匙扣沒有得到數據

這裏是我的Set-代碼:

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"Animex" accessGroup:nil]; 
[keychain setObject:username forKey:@"Username"]; 
[keychain setObject:password forKey:@"Password"]; 

[keychain release]; 

這是我的Get-代碼:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
NSString *password = [prefs stringForKey:@"Password"]; 

if ([password length] != 0) 
{ 
    return password; 
} 
else 
{ 
    return nil; 
} 

我只得到NIL回來,我做錯了什麼?

回答

5

您正在使用KeychainItemWrapper存儲值,然後嘗試使用NSUserDefaults檢索它們。這些是2個完全不同的支持商店,因此您需要使用KeychainItemWrapper來檢索您的值。你也應該使用kSecValueDatakSecAttrAccount

您鏈接到的文章實際上在那裏有答案。

//Set 
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"Animex" accessGroup:nil]; 
[keychain setObject:username forKey:kSecAttrAccount]; 
[keychain setObject:password forKey:kSecValueData]; 

[keychain release]; 


//Retrieve 
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"Animex" accessGroup:nil]; 
NSString *password = [keychainItem objectForKey:kSecValueData]; 

if ([password length] != 0) 
{ 
    return password; 
} 
else 
{ 
    return nil; 
} 
[keychain release]; 
+0

喬嗨,這很重要,如果我存儲鍵'kSecValueData'密碼?我在網上看到很多例子,其中用戶以其他方式存儲用戶名/密碼,以及如何完成。有沒有不正確的方法? – sooper

+0

@Sooper我在第一個例子中向後張貼了他們,我對此表示歉意。 – Joe