संपादित किया गया है: शीर्षक बदल दिया गया है। मैं इसे समय में पता नहीं था, लेकिन इस Why am I crashing after MKMapView is freed if I'm no longer using it?MKMapView अभी भी प्रतिनिधि के लिए संदेश भेज रहा है इसके पर्यवेक्षण को
का डुप्लिकेट यह सवाल Why is object not dealloc'ed when using ARC + NSZombieEnabled के समान लेकिन अलग पर्याप्त मैंने सोचा था कि यह वहाँ बाहर फेंकने का मामला किसी में लायक समझता है और मुझे समझा सकता है क्या घटित हो रहा है। दूसरा प्रश्न एक्सकोड बग हो सकता है, इसलिए मुझे लगता है कि यह समान हो सकता है।
परिदृश्य:
RootViewController
एकtableView
आइटम- एक सेल का चयन का एक समूह प्रदर्शित प्रस्तुत करता है एक मॉडल
detailViewController
एक औरtableView
- तालिका सेल की
detailViewController
में एक युक्त एकMKMapView
स्थान दिखा शामिल है आइटम mapView.delegate = detailViewController
- मोडल
detailViewController
इसके शीघ्र बाद, एप्लिकेशन बी/MKMapView
अब mapView:viewForAnnotation:
भेजता ग dealloc'ed detailViewController
दुर्घटनाओं को खारिज करें। इस क्रैश को एक उपयोगकर्ता डिवाइस पर विज्ञापन-प्रसार वितरण के साथ पुनर्निर्मित किया गया है, इसलिए इस मुद्दे के पास NSZombieEnabled
से कोई लेना देना नहीं है।
मैं जोड़कर दुर्घटना को हल करने में सक्षम था:
_mapView.delegate = nil;
tableViewCell
MapView युक्त
dealloc
विधि के लिए
।
प्रश्न: जब सेल को हटा दिया जाता है तो प्रतिनिधि को निपटा देना क्यों जरूरी है? ऐसा लगता है कि mapView
को एआरसी द्वारा हटा दिया जाना चाहिए जब सेल को इस अनावश्यक छोड़ने से रोक दिया जाता है। प्रतिनिधियों को नील करना अच्छा अभ्यास है, लेकिन मुझे नहीं लगता था कि इस मामले में इसकी आवश्यकता होगी।
संपादित करें:
@property (nonatomic, strong) MKMapView * mapView;
संपादित करें 2:: मैं डॉक्स पढ़ने में बेहतर करने की जरूरत है लगता दोनों detailViewController
और UITableViewCells
के सभी subviews आला (nonatomic, strong)
गुण के रूप में घोषित कर रहे हैं। @fluchtpunkt सही है। यहाँ MKMapView
प्रलेखन से प्रासंगिक जानकारी है:
एक MKMapView वस्तु जिसके लिए आप एक प्रतिनिधि निर्धारित किया है को रिहा करने से पहले, नहीं के बराबर करने के लिए उस वस्तु के प्रतिनिधि गुण सेट करने के लिए याद है। एक स्थान आप यह कर सकते हैं यह dealloc विधि में है जहां आप मानचित्र दृश्य का निपटान करते हैं।
क्या आप अपने 'विस्तार दृश्य नियंत्रक' के लिए @ strong/@ कमजोर संपत्ति घोषणाएं पोस्ट कर सकते हैं, खासकर 'एमकेमैप व्यू'? –
किया गया। मेरे पास कोई @weak गुण नहीं है क्योंकि ऐप आईओएस 4.3+ को लक्षित करता है। नक्शा दृश्य एक कस्टम 'UITableViewCell' में एक मजबूत संपत्ति के रूप में है। – XJones
जैसा कि मैंने यहां वर्णित किया है, वही चीज जैसा लगता है: http://stackoverflow.com/questions/2188098/why-am-i-crashing-after-mkmapview-is-freed-if-im-no- लंबे समय से उपयोग करने के लिए यह –