2011-08-19 11 views
15

के साथ कीचेन में कुंजी संग्रह करना मैं कुंजीचैन को प्रमाणीकरण टोकन को सहेजने के लिए ऐप्पल के नमूना कोड द्वारा प्रदान की गई KeyChainItemWrapper क्लास का उपयोग कर रहा हूं।KeyChainItemWrapper

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

पर मिल सकता है सुनिश्चित करें कि आपने कीचेन एक्सेस प्लिस्ट फ़ाइल को जोड़ा है। 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 के एआरसी संस्करण का उपयोग करते समय, आपको इसे निम्न तरीके से करने की आवश्यकता है: '[_authenticationTokenKeychain setValue: प्रमाणीकरण टोकन के लिए: (__ ब्रिज एनएसएसटींग *) kSecValueData]; ' –

+1

@DamienMATHIEU मैं एआरसी संस्करण का उपयोग कर रहा हूं लेकिन मुझे अभी भी समस्याएं हैं। मुझे यह त्रुटि मिलती है: '[ setValue: forUndefinedKey:]: यह वर्ग कुंजी v_Data के लिए कुंजी मान कोडिंग-अनुरूप नहीं है।' कोई विचार की क्या गलत हो सकता है? – Interfector

+2

@ setValue ** का उपयोग करने के बजाय @ इंटरफेक्टर, ** setObject ** का उपयोग करें ** – fdezjose

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

ऊपर कोड स्निपेट के लिए, कुंजी परम केवल है कुंजी का उपयोग कर सकते हैं एसडीके से प्रदान किया गया। आप सभी को SecItem.h