मेरे पास एक आईओएस ऐप है जो एक स्क्रीन पर क्रैश होने लगता है जिसमें UIWebView है। ऐसा लगता है कि क्रैश ज्यादातर आईफोन 5 सी डिवाइस (74% समय) और आईओएस 10.X पर 100% समय पर होता है।आईओएस UIWebView वेबकैर पर यादृच्छिक रूप से क्रैश :: फ्रेमट्री :: शीर्ष
अपवाद संदेश है:
EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000028
जो कम स्मृति पता यह मुझे लगता है कि कुछ
nil
था बनाता से
।
0 WebCore WebCore::FrameTree::top() + 0
1 WebCore WebCore::ContentSecurityPolicy::allowFrameAncestors() + 33
2 WebCore WebCore::DocumentLoader::responseReceived() + 413
3 WebCore WebCore::DocumentLoader::handleSubstituteDataLoadNow() + 203
4 WebCore WebCore::ThreadTimers::sharedTimerFiredInternal() + 149
5 WebCore WebCore::timerFired() + 23
6 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 15
7 CoreFoundation __CFRunLoopDoTimer + 833
8 CoreFoundation __CFRunLoopDoTimers + 189
9 CoreFoundation __CFRunLoopRun + 781
10 CoreFoundation CFRunLoopRunSpecific + 471
11 CoreFoundation CFRunLoopRunInMode + 105
12 WebCore RunWebThread() + 427
13 libsystem_pthread.dylib _pthread_body + 217
14 libsystem_pthread.dylib _pthread_start + 235
मैं इस दुर्घटना अपने आप को पुन: पेश नहीं कर सकते हैं:
यहाँ पश्व-अनुरेखन (यह मुख्य थ्रेड नहीं है) है।
चूंकि वेबकिट खुला स्रोत है, इसलिए मुझे वह कोड मिला जहां यह दुर्घटनाग्रस्त हो गया: WebCore::FrameTree::top। उस कोड को देखने से, मुझे लगता है कि m_thisFrame->tree()
NULL
है, लेकिन मुझे यकीन नहीं है कि इसे कैसे समझाया जाए। मुझे यकीन नहीं है कि उस संदर्भ में वास्तव में "फ्रेम" और "पेड़" क्या हैं।
बैकट्रैस से ऐसा लगता है कि कुछ टाइमर निकाल दिया जा रहा है, संभवतः व्यू कंट्रोलर के बाद या वेब व्यू पहले ही डिलीकेट किया गया है? क्या वह टाइमर जावास्क्रिप्ट setTimeout
कॉल के कारण है?
यह भी पता चलता है कि हर बार यह दुर्घटना होती है, मुझे दुर्घटना से ठीक पहले [UIWebViewDelegate webView:didFailLoadWithError:]
पर कॉल मिलता है। कि प्रतिनिधि विधि में लौट आए सबसे आम त्रुटियों हैं:
- फ्रेम लोड बाधित
- भी कई HTTP पुनर्निर्देश
- अनुरोध
टाइम आउट हो गया लेकिन मैं करने के लिए जगह में एनालिटिक्स की जरूरत नहीं है क्रैश के साथ त्रुटि संदेश को सहसंबंधित करें, इसलिए मुझे यकीन नहीं है कि कौन सा (यदि कोई है) इसे समझाएगा। जब वह प्रतिनिधि विधि आग लगती है, तो मैं उपयोगकर्ता को एक मोडल में एक त्रुटि संदेश दिखाता हूं। क्या यह दुर्घटना से संबंधित हो सकता है? मैंने "फ़्रेम लोड बाधित" और "बहुत अधिक HTTP रीडायरेक्ट" त्रुटियों को पुन: उत्पन्न करने का प्रयास किया लेकिन सिम्युलेटर में मेरे लिए क्रैश का कारण नहीं बनता।
मैं पहले से ही this answer (अधिकतर) में सलाह का पालन करें और viewWillDisappear
में [webview stopLoading]
संपर्क करें, मैं युक्त देखें नियंत्रक के dealloc
में self.webView.delegate = nil
फोन, लेकिन यह मदद नहीं की।
मुझे एक ही समस्या का सामना करना पड़ रहा है। क्या आपको कोई समाधान मिला? – OMK
मैं इसे एक उत्तर के रूप में नहीं डाल रहा हूं क्योंकि यह अनुमान है, लेकिन मुझे लगता है कि WKWebView पर स्विच करने से इन प्रकार के दुर्घटनाएं हल हो सकती हैं। –
धन्यवाद। मै कोशिश करूँगा। – OMK