2017-05-18 15 views
5

मेरे पास एक आईओएस ऐप है जो एक स्क्रीन पर क्रैश होने लगता है जिसमें 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 फोन, लेकिन यह मदद नहीं की।

+0

मुझे एक ही समस्या का सामना करना पड़ रहा है। क्या आपको कोई समाधान मिला? – OMK

+0

मैं इसे एक उत्तर के रूप में नहीं डाल रहा हूं क्योंकि यह अनुमान है, लेकिन मुझे लगता है कि WKWebView पर स्विच करने से इन प्रकार के दुर्घटनाएं हल हो सकती हैं। –

+0

धन्यवाद। मै कोशिश करूँगा। – OMK

उत्तर

0

यह वास्तव में एक उत्तर नहीं है, लेकिन यह क्रैश सामग्री फ़िल्टरिंग (अभिभावक नियंत्रण) सक्षम होने पर संबंधित प्रतीत होता है। यदि आप UIWebView में आईओएस पैरेंट कंट्रोल ब्लॉकलिस्ट में जो भी डोमेन लोड कर रहे हैं, उसे जोड़ना चाहते हैं, तो आपको यह त्रुटि एप्लिकेशन लॉग में देखना चाहिए (वेबकिट के वेबफिल्टर से आंतरिक रूप से आना)। ऐसा लगता है कि UIWebView को किसी भी तरह से अमान्य कर दिया गया है, इसलिए जब आप इसके साथ फिर से बातचीत करते हैं, तो यह आपके पूरे ऐप को क्रैश करता है। आप शायद WKWebView पर स्विच करके क्रैश से बच सकते हैं।

WF: WebFilterEvaluator:addData: https://some-blocked-url.com is restricted: blacklisted

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