2011-08-19 13 views
15

Kimlik doğrulama belirtecini anahtarlığa kaydetmek için Apple'ın Örnek Kodu tarafından sağlanan KeyChainItemWrapper sınıfını kullanıyorum. Ben Anahtarlık değerini ayarlamak çalışıyorum zamanKeyChainItemWrapper ile KeyChain'de anahtarların kaydedilmesi

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

Fakat, garip bir istisna

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

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

anahtarlık henüz yok yükseltilir (bu çağrının yapıldığı andaki) Bu istisna neden olabilir?

+1

Anahtarlık erişim plist dosyasını eklediğinizden emin olun. http://stackoverflow.com/questions/5859615/iphone-debugging-the-generickeychain-example – nessalabs

cevap

33

Standart anahtarları kullanmanız gerekiyor, bu yüzden burada @"auth_token" yanlıştır. Geçerli sabitler listesi ile

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

kaynak: Örneğin Keychain Services Reference

, şunları kullanabilirsiniz:

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

yukarıdaki kod parçacığı için
+12

'a göz atın KeychainItemWrapper'ın ARC sürümünü kullanırken, aşağıdaki yolu yapmanız gerekir: '[_authenticationTokenKeychain setValue: authenticationToken forKey: (__ köprü NSString *) kSecValueData]; ' –

+1

@DamienMATHIEU ARC sürümünü kullanıyorum ama hala sorun yaşıyorum. Bu hatayı alıyorum: '[ setValue: forUndefinedKey:]: Bu sınıf anahtar v_Data için kodlama uyumlu anahtar değer değil.' Herhangi bir fikir yanlış olabilir? – Interfector

+2

@ ** setValue ** kullanmak yerine Interfector, ** setObject ** kullanın – fdezjose

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

, anahtar param tuşlarını kullanabilirsiniz sadece sdk'den sağlanmıştır. Tümü SecItem.h içinde bulabilirsiniz.

İlgili konular