मैं क्यों दुर्घटनाग्रस्त हूँ अगर मैं इसे अब नहीं उपयोग कर रहा हूँ के बाद MKMapView मुक्त हो जाता है?

वोट
23

मैं एक है MKMapView। कभी कभी के बाद मेरे विचार नियंत्रक को खारिज कर दिया है, मैं एक मिल जाएगा EXC_BAD_ACCESS

मैं चालू NSSZombiesहै और यह की तरह लग रहा MKMapViewहै प्रतिनिधि - मेरे विचार नियंत्रक! - कहा जाता है, किया जा रहा है के बावजूद दोनों MKMapViewऔर UIViewControllerउपवर्ग मुक्त कर दिया जा रहा है। मैं देख लिया है, और मेरे स्मृति प्रबंधन सही है।

क्या चल रहा है?

02/02/2010 को 23:10
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


4 जवाब

वोट
43

इसका कारण यह है जिस तरह से है MKMapViewकाम करता है। वहाँ एक ऑपरेशन लंबित है, तो MapKit को बनाए रखना है MKMapViewऔर यह वास्तव में अभी तक पुनः आवंटित की जाती नहीं किया गया है। यही कारण है कि एक समस्या ही नहीं है। समस्या यह है कि यह अभी भी अपने प्रतिनिधि को संदेश भेज रहा है है।

वैकल्पिक हल आसान है: आपके विचार नियंत्रक के सफाई का हिस्सा के लिए नक्शा दृश्य के प्रतिनिधि सेट के रूप में nilहै, जो नहीं कर पाएगा MKMapViewयह संदेश भेजने से।

इस में प्रलेखित है MKMapViewDelegate प्रोटोकॉल संदर्भ :

एक MKMapView वस्तु जिसके लिए आप एक प्रतिनिधि निर्धारित किया है को रिहा करने से पहले, नहीं के बराबर करने के लिए उस वस्तु के प्रतिनिधि गुण सेट करने के लिए याद है। एक ही स्थान पर आप यह कर सकते हैं dealloc विधि जहां मानचित्र दृश्य के निपटान में है।

संपादित करें: ऑस्कर जो प्रलेखन उद्धरण यहाँ प्रदान की एक वोट दें और साथ ही, बस नीचे, दे।

यह देखते हुए एआरसी, मेरा सुझाव यह मतलब है कि आप करने के लिए अपने मानचित्र दृश्य के प्रतिनिधि स्थापित करना चाहिए nilआपके विचार नियंत्रक के दशक में dealloc

02/02/2010 को 23:18
का स्रोत उपयोगकर्ता

वोट
18

ठीक है, यह जवाब की पुष्टि है। यह एप्पल दस्तावेज़ से है, लेकिन यह MKMapView से लापता है। यह केवल अपनी प्रतिनिधि प्रोटोकॉल के लिए प्रलेखन के नीचे पाया है:

एक MKMapView वस्तु जिसके लिए आप एक प्रतिनिधि निर्धारित किया है को रिहा करने से पहले, नहीं के बराबर करने के लिए उस वस्तु के प्रतिनिधि गुण सेट करने के लिए याद है। एक ही स्थान पर आप यह कर सकते हैं dealloc विधि जहां मानचित्र दृश्य के निपटान में है।

नोट: यह भी UIWebView पर लागू होता है।

मैं प्रतिनिधि dealloc विधि में नहीं के बराबर करने के लिए MapView के प्रतिनिधि सूचक निर्धारित करते हैं, और हमारे दुर्घटनाओं समाप्त किया गया है लगता है।

20/11/2011 को 22:20
का स्रोत उपयोगकर्ता

वोट
2

मानचित्र दृश्य के प्रतिनिधि की स्थापना करने के लिए nilमेरे लिए काम नहीं किया। हालांकि, की स्थापना showsUserLocation=NOप्रतिनिधि पर सुनिश्चित करें कि कोई स्थान अद्यतन प्राप्त कर रहे हैं बनाने के द्वारा काम किया।

02/09/2011 को 17:57
का स्रोत उपयोगकर्ता

वोट
0

समस्या यह है, मेरे मामले में, कि पहली बार मैं एप्लिकेशन मैं नहीं दबाते जब स्थान प्राधिकरण के लिए उत्साह "अनुमति" (गलती से !!) का शुभारंभ किया था।

की स्थापना रद्द एप्लिकेशन और यह पुन: स्थापित करने, जब शीघ्र मैं प्राधिकरण और कोई और अधिक दुर्घटना की अनुमति देने के दिखाई देते हैं!

21/05/2015 को 15:11
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more