2011-10-18 8 views
28

आईओएस 5 एसडीके के साथ संगत होने के लिए मेरे कुछ कोड अपडेट करने में, मैंने "कोड टू ऑब्जेक्टिव- सी एआरसी "एक्सकोड में और एक त्रुटि प्राप्त हुई। त्रुटि मेरी .h फ़ाइल में एक आवृत्ति चर पर होती है।स्वचालित संदर्भ गणना: गैर-कॉन्स प्रकार 'एनएसईआरआर * * के लिए कोई स्पष्ट स्वामित्व नहीं है

NSError **_error; 

त्रुटि "गैर स्थिरांक प्रकार 'NSError *' कोई स्पष्ट स्वामित्व के साथ करने के लिए सूचक।" कहते हैं मैं इसे कैसे ठीक कर सकता हूं?

+0

यह प्रश्न (देखें http://stackoverflow.com/questions/6907726/setting-nserror-within-a-block-using-arc) इस विषय पर सबसे नज़दीकी चीज है। – Ziminji

+1

आप आवृत्ति चर में डबल इंडिकेशन का उपयोग क्यों कर रहे हैं? आपको केवल विधि पैरामीटर के लिए इसकी आवश्यकता होनी चाहिए ताकि एनएसईआरआरआर को वापस पास किया जा सके। –

+0

@BradLarson ठीक है, तो '(NSError **): त्रुटि 'को एक तर्क के रूप में लेने वाली विधि को कॉल करते समय एक' NSError' उदाहरण प्रारंभ करने के लिए सही तरीका (एआरसी में) क्या है? – raffian

उत्तर

18

जब एक उदाहरण चर में NSError वस्तुओं के भंडारण आप एक सरल सूचक के रूप में यह घोषणा करने के लिए है:

@interface Foo : NSObject 
{ 
    NSError *_errror; 
} 

NSError ** केवल परोक्ष रूप से फोन करने वाले के लिए एक विधि से NSError वस्तुओं वापस जाने के लिए प्रयोग किया जाता है। यह (संभवतः) एक आवृत्ति चर में स्टोर करने के लिए एक त्रुटि है।

54

आप Transitioning to ARC Release Notes

NSError के लिए ** आप __autoreleasing का उपयोग करेंगे तो निकोलाई द्वारा प्रदान उदाहरण तो यह

@interface Foo : NSObject 
{ 
    NSError * __autoreleasing *error; 
} 

वाक्य रचना है कैसा दिखेगा में वर्णित जीवन क्वालिफायर में से एक का उपयोग कर सकते थोड़ा अजीब और आपको निकोलाइस सलाह का पालन करना चाहिए, लेकिन अगर आपको यकीन है कि एनएसईआरआर ** यह है कि आप यह चाहते हैं कि यह काम करे।

+1

यह संकलित नहीं करता है, 'NSError * __autoreleasing * _error;' –

+2

आज़माएं यह सही उत्तर है। @ निकोलई रूहे राज्यों के उत्तर के रूप में ऐसा करना गलत नहीं है। –

+3

इस उत्तर के लिए धन्यवाद! मैं यह जोड़ना चाहता हूं कि मैंने अन्य जीवनकाल क्वालीफायरों का भी इसी वाक्यविन्यास के साथ उपयोग किया है, जैसे 'एनएसएआरएआरए * __strong * सरणी' इत्यादि। –

संबंधित मुद्दे