ऐप्पल ने GenericKeyChain sample code में KeyChainItemWrapper क्लास प्रदान किया है। एसओ पर यहां एक एआरसीड समाधान है, जिसे मैं अनुसरण करने की कोशिश कर रहा हूं: wrapper आईओएस पर कीचेन में स्टोर करने के लिए।पासवर्ड के लिए KeyChainItemWrapper क्रैश में सहेजना
आवरण का उपयोग इस तरह है:
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"F11-email-auth" accessGroup:nil];
[keychain setObject:[emailTextfield text] forKey:(__bridge id)(kSecMatchEmailAddressIfPresent)];
[keychain setObject:[passwordTextfield text] forKey:(__bridge id)(kSecClassGenericPassword)];
ईमेल पाठ क्षेत्र के साथ लाइन स्वीकार किया जाता है। लेकिन पासवर्ड के साथ दूसरी पंक्ति निम्नलिखित अपवाद के साथ दुर्घटनाग्रस्त हो जाती है।
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn't add the Keychain Item.'
*** First throw call stack:
(
0 CoreFoundation 0x01b445e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x018c78b6 objc_exception_throw + 44
2 CoreFoundation 0x01b44448 +[NSException raise:format:arguments:] + 136
3 Foundation 0x014a823e -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116
4 Feeltracker 0x000053b3 -[KeychainItemWrapper writeToKeychain] + 899
5 Feeltracker 0x00004700 -[KeychainItemWrapper setObject:forKey:] + 272
6 Feeltracker 0x000092d6 -[FTLoginViewController connectToAccount:] + 374
7 libobjc.A.dylib 0x018d9874 -
कारण क्या हो सकता है? मुझे आश्चर्य है कि क्या इसका उपयोग करने वाले स्थिरांक के साथ इसका कोई संबंध नहीं है।
अद्यतन:
rmaddy की मदद के लिए धन्यवाद:
// No previous item found; add the new one.
result = SecItemAdd((__bridge CFDictionaryRef)[self dictionaryToSecItemFormat:keychainItemData], NULL);
NSAssert(result == noErr, @"Couldn't add the Keychain Item.");
परिणाम -50 पर है:
इस बिट त्रुटि फेंक लगता है। SecItemAdd एक lib विधि है। जैसा कि मैंने उम्मीद कर रहा था, यह किसी भी तरह चाबी का गुच्छा सीधे निपटने से संबंधित है ...
keychainItemData शामिल हैं:
किसी भी कोड के बिना आपका क्या मतलब है? क्या आप चाहते हैं कि मैं पूरे रैपर को कॉपी और पेस्ट करें, जिसे मैंने ऊपर से जोड़ा है, फिर से? मैंने आपको बिल्कुल दिखाया है कि मैंने क्या किया है। (इसका ऐप्पल का रैपर, इसकी तीसरी पार्टी नहीं है। दिए गए लिंक पर क्लिक करें, स्पैम पर टिप्पणी करने से पहले) – Houman
दाईज-दंजन, मुझे नहीं पता कि आपको बुरा दिन हो रहा है या आप बस बचपन में काम कर रहे हैं। सबसे पहले आप स्पैम टिप्पणी कर रहे हैं, बिना किसी कारण के आप डाउनवॉटिंग/बंद करना शुरू कर देते हैं, और फिर अपनी खुद की टिप्पणियों को वापस नहीं ढूंढने के लिए हटा दें। यदि आप मदद नहीं करना चाहते हैं, तो यह ठीक है। आप जो करते हैं वह सहायक नहीं है, न ही पेशेवर। – Houman
डीबगर का उपयोग करें और 'SecItemAdd' के वापसी मूल्य को देखें (परिणाम कोड शामिल करने के लिए लॉग स्टेटमेंट अपडेट करें)। फिर "कुंजीपटल आइटम नहीं जोड़ सका" त्रुटि संदेश पर खोजें और एक ही त्रुटि कोड का संदर्भ देने वाले लोगों को ढूंढें। कई संभावित कारण प्रतीत होते हैं। त्रुटि कोड इसे बहुत कम कर देगा। – rmaddy