मेरे पास एक दृश्य है जिसमें UIWebView है जो एक Google मानचित्र लोड कर रहा है (इसलिए जावास्क्रिप्ट आदि के बहुत सारे)। मेरी समस्या यह है कि यदि वेब व्यू लोडिंग समाप्त होने से पहले उपयोगकर्ता ने एनएवी बार पर 'बैक' बटन हिट किया है, तो मुझे यह स्पष्ट नहीं है कि वेब दृश्य को लोड करना बंद करने के लिए कैसे कहें और फिर इसे छोड़ दें संदेशों को हटाए गए उदाहरण में भेजा गया। मुझे यह भी यकीन नहीं है कि एक वेब व्यू इसके कंटेनर दृश्य को पूरा होने से पहले गायब हो जाता है (लेकिन अगर कोई लोड होने से पहले उपयोगकर्ता बैक बटन हिट करता है तो मुझे कोई विकल्प नहीं है)।दृश्य लोडिंग UIWebView को सुरक्षित रूप से बंद करने के तरीके को कैसे देखें?
मेरी viewWillDisappear हैंडलर में मैं इस
map.delegate=nil;
[self.map stopLoading];
इस, ठीक है ज्यादातर मामलों को संभालने के लिए के रूप में प्रतिनिधि nil'ing यह मेरे विचार नियंत्रक से didFailLoadWithError भेजने के बंद हो जाता है लगता है की है। हालांकि अगर मैं अपने दृश्य की डेलोक विधि में वेब दृश्य जारी करता हूं, कभी-कभी (अंतःस्थापित) मुझे अभी भी हटाए गए उदाहरण को भेजा गया संदेश मिलेगा, जो वास्तविक पृष्ठ में चल रहे जावास्क्रिप्ट से संबंधित प्रतीत होता है, उदाहरण के लिए:
-[UIWebView webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]: message sent to deallocated instance 0x4469ee0
यदि मैं बस वेबदृश्य जारी नहीं करता हूं, तो मुझे ये संदेश नहीं मिलते हैं, हालांकि मुझे लगता है कि मैं वेबदृश्य को लीक कर रहा हूं।
मैं viewWillDisappear के भीतर 'stopLoading' संदेश भेजने नहीं करते हैं, और बस जारी वेबव्यू, तो मैं संदेशों इस तरह देखें:
/SourceCache/WebCore/WebCore-351.9.42/wak/WKWindow.c:250 WKWindowIsSuspendedWindow: NULL window.
संभवतः संबंधित, मैं कभी कभी (फिर से पूरी तरह से रुक-रुक कर) एक मिल बदसूरत heisenbug जहां किसी अन्य दृश्य के navbar पर बैक बटन पर क्लिक करने से शीर्षक पॉप होगा, लेकिन दृश्य नहीं। दूसरे शब्दों में, मुझे स्टैक पर व्यू एन के शीर्षक के साथ छोड़ दिया गया है, लेकिन दृश्य दिखाना अभी भी एन + 1 देख रहा है (नतीजा यह है कि आप इस स्क्रीन पर फंस गए हैं और रूट व्यू पर वापस नहीं आ सकते हैं - आप जा सकते हैं दूसरी दिशा, यानी अधिक विचारों को धक्का दें और उस दृश्य पर वापस पॉप करें जो सही रूप से पॉप नहीं हुआ है, केवल रूट व्यू पर नहीं। ऐप छोड़ने का एकमात्र तरीका है)। दूसरी बार एक ही दृश्य पर धक्का और पॉप का एक ही अनुक्रम ठीक काम करता है।
यह विशेष मुझे नट चला रहा है। मुझे लगता है कि यह वेब दृश्य लोड होने से पहले गायब होने वाले दृश्य से संबंधित हो सकता है, यानी मुझे इस मामले में संदेह है कि यह स्मृति पर लिख सकता है और दृश्य स्टैक को भ्रमित कर सकता है। या, यह पूरी तरह से असंबंधित और कहीं और एक बग हो सकता है (मैं कभी भी डीबग बिल्ड मोड में इसे पुन: उत्पन्न करने में सक्षम नहीं हूं, यह केवल रिलीज बिल्ड सेटिंग्स के साथ होता है जब मैं इसे gdb :-) से नहीं देख सकता। मेरे डीबग रन से, मुझे नहीं लगता कि मैं कुछ भी खत्म कर रहा हूं। और मैं केवल इसे ट्रिगर करने में सक्षम हूं, अगर किसी बिंदु पर मैंने उस दृश्य को मारा है जिसमें वेब दृश्य है, और यह उसके तुरंत बाद नहीं होता है।
यदि मैं आप थे, तो मैं ऐप्पल के साथ एक बग फाइल करता। वेब दृश्य को हटाए जाने के बाद किसी भी संदेश को प्राप्त नहीं किया जाना चाहिए - इसे जेएस प्रोसेसिंग और यूआरएल लोडिंग को समाप्त होने पर समाप्त करना चाहिए। मैंने कभी-कभी नौसेना आइटम समस्या देखी है, लेकिन केवल आईफोन ओएस 3.0 बीटा स्थापित करने के बाद। शायद यह एक ओएस बग भी है? –
हां यही मैंने सोचा था (dealloc साफ करना चाहिए)। सेब डॉक्स आम तौर पर उनके द्वारा प्रदान की जाने वाली वस्तुओं के साथ अनुबंध पर बहुत स्पष्ट नहीं होते हैं। मैंने पहले कभी नौसेना की बात नहीं देखी है और यह मेरे कार्यक्रम में नियमित रूप से पर्याप्त होता है, मुझे लगता है कि यह कुछ ऐसा होना चाहिए जो मैं कर रहा हूं - उम्मीद है कि अगर मैं इसे ठीक करने का प्रबंधन करता हूं तो इस वेबव्यू चीज़ से संबंधित है। – frankodwyer
ओह और जोड़ने के लिए, यह 2.2.1 – frankodwyer