2012-04-20 10 views
7

से अस्वीकृत है मुझे अपने कीचेन से उपयोगकर्ता नाम/पासवर्ड प्राप्त करना है। इस के लिए मैं इस गाइड का पालन किया:आईओएस: CFTypeRef एआरसी

Simple iPhone Keychain Access

लेकिन इस हिस्से एआरसी के साथ की अनुमति नहीं है:

NSData *result = nil;  
OSStatus status = SecItemCopyMatching(
        (CFDictionaryRef)searchDictionary,            
        (CFTypeRef *)&result); 

मैं क्या कर सकता है?

उत्तर

19

एआरसी केवल उद्देश्य-सी प्रकारों का प्रबंधन करता है। यदि आप कोर फाउंडेशन प्रकारों में डाले हैं तो आपको एआरसी को बताना होगा जो __bridge, __bridge_retained या __bridge_transfer का उपयोग करके चर का मालिक है।

एआरसी के तहत टोल-फ्री ब्रिजिंग पर Apple's official documentation पर, या this blog post (टोल-फ्री ब्रिजिंग तक स्क्रॉल करें) को एक महान सिंहावलोकन के लिए देखें।

उदाहरण के लिए:

NSData *inData = nil; 
CFTypeRef inTypeRef = (__bridge CFTypeRef)inData; 
OSStatus status = SecItemCopyMatching(
        (__bridge CFDictionaryRef)searchDictionary, 
        &inTypeRef); 
+0

आप साइमन धन्यवाद। मैंने पहले से ही '__bridge' का उपयोग किया है, लेकिन' (CFTypeRef *) और परिणाम के लिए); 'यह काम नहीं किया .. एक्सकोड ने देखा: 'CFTypeRef *' (उर्फ 'कॉन्स्ट शून्य **') के लिए असंगत प्रकार कास्टिंग 'NSData * __ strong *' कास्टिंग __bridge कास्ट – filou

+4

के साथ अपनी गिरावट से अपनी कास्ट अलग करें। कुछ ऐसा: 'CFTypeRef r = (__bridge CFTypeRef) परिणाम; OSStatus स्थिति = SecItemCopyMatching ((__ पुल CFDictionaryRef) searchDictionary, &r); ' –

+0

काम नहीं किया। कुछ कारणों से लीलांग समाधान किया गया। Xcode 7.3 –

1
CFTypeRef inData = NULL; 
OSStatus status = SecItemCopyMatching(
        (__bridge CFDictionaryRef)searchDictionary, 
        & inData); 
NSData *data = (__bridge NSData *)inData; 
+0

" इसे आज़माएं "बहुत उपयोगी नहीं है क्योंकि यह समझ में नहीं आता कि कैसे ठीक किया जाए यह एक और मामले में। –