2011-08-19 132 views
15

我使用Apple的示例代碼提供的KeyChainItemWrapper類將驗證令牌保存到鑰匙串中。使用KeyChainItemWrapper在KeyChain中存儲密鑰

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier"JetTaxiApp_AuthToken" accessGroup:nil]; 

但是,當我試圖將值設置爲鑰匙扣,奇數引發異常

[_authenticationTokenKeychain setObject:authenticationToken forKey: @"auth_token"]; 

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn't add the Keychain Item.'

鑰匙串尚不存在(在此調用的瞬間) 什麼會導致此異常?

+1

確保您添加了鑰匙串訪問plist文件。 看看http://stackoverflow.com/questions/5859615/iphone-debugging-the-generickeychain-example – nessalabs

回答

33

您需要使用標準密鑰,所以在這裏您的@"auth_token"不正確。

The keys that can be used for this purpose and the possible values for each key are listed in the 「Keychain Services Constants」 section.

來源,有效常量的列表:Keychain Services Reference

例如,你可以使用:

[_authenticationTokenKeychain setObject:authenticationToken forKey: (__bridge NSString *)kSecValueData];

+12

當使用keychainItemWrapper的ARC版本時,你需要按照以下方法:'[_authenticationTokenKeychain setValue: authenticationToken forKey:(__ bridge NSString *)kSecValueData];' –

+1

@DamienMATHIEU我正在使用ARC版本,但我仍然有問題。我得到這個錯誤:'[ setValue:forUndefinedKey:]:這個類不是密鑰值編碼兼容的密鑰v_Data'。任何想法可能是錯的? – Interfector

+2

@Interfector而不是使用** setValue **,使用** setObject ** – fdezjose

0
[_authenticationTokenKeychain setObject:authenticationToken forKey: @"auth_token"]; 

對於上面的代碼片段,關鍵參數是隻能用鑰匙由sdk提供。 您可以在SecItem.h中找到全部