2011-12-15 16 views
15

मेरे पास एक UIWebView है जिसका उपयोग मैं कई छोटे पीडीएफ दिखाने के लिए कर रहा हूं। उपयोगकर्ता एक टेबल से एक समाचार आलेख का चयन करता है और फिर उसी स्क्रीन पर UIWebView में आलेख (पीडीएफ) लोड होता है। पहला भार हमेशा ठीक हो जाता है। फिर अगला आइटम जो मैं चुनता हूं (इससे कोई फर्क नहीं पड़ता) ऐप को दुर्घटनाग्रस्त करता है।UIWebView दूसरे पीडीएफ लोड अनुरोध पर क्रैशिंग

यह कैसे मैं प्रत्येक लेख लोड हो रहा है कर रहा हूँ है:

NSString *filePath = [[NSBundle mainBundle] pathForResource:articleFileName ofType:@"pdf"]; 
[articleView stopLoading]; 
[articleView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]]]; 

दुर्घटना loadRequest लाइन के बाद होता है।
दुर्घटना में कोई त्रुटि नहीं है। अन्य की तुलना में:।

सभी अपवाद {} 0x3629f000

Catchpoint 3 (अपवाद) (gdb)

यह सिर्फ मुख्य करने के लिए दुर्घटनाओं()। मैंने डीबगर में सत्यापित किया है कि यह प्रत्येक अनुरोध पर सही फ़ाइल पथ का उपयोग कर रहा है।

मेरे पास NSZombies चल रहा है और मेरे पास सभी अपवादों के लिए ब्रेकपॉइंट सेट हैं।

+0

क्या वेब व्यू प्रतिनिधि परिवर्तन बदलता है? – amattn

+0

प्रतिनिधि स्वयं (आईबी के माध्यम से वायर्ड) कभी नहीं बदलता है। – Dancreek

+0

दुर्घटना से पहले 4 प्रतिनिधि तरीकों में से कौन सा कहा जाता है? – amattn

उत्तर

34

मुझे यह भी सही समस्या है। स्टीव को बड़ा धन्यवाद, मुझे इसे और भी कम करने में मदद करने के लिए, मेरा अपवाद उसके जैसा ही है।

क्या आपने सभी अपवादों को सेट किया है? मैंने पाया कि अगर मैं उस ब्रेकपॉइंट को अक्षम करता हूं, तो यह और भी क्रैश नहीं होता है। मुझे क्या लगता है कि यह नए डीबगर या आईओएस संस्करण में बस कुछ बग था? दूसरी बात जो मुझे सोच रही थी वह यह था कि जब मैं आईओएस 4.3.एक्स या 4.3 सिम्युलेटर के साथ डिवाइस पर चलता हूं तो यह क्रैश नहीं होता है।

+5

क्रैश हो गया "सभी अपवादों को तोड़ने" ब्रेकपॉइंट को अक्षम करने से मेरी समस्या हल हो गई, जो UIWebPDFView _removeBackgroundImageObserver के बाद आ रहा था अगर स्टैकट्रैस में लिखा गया है। कौन सोचता है कि ब्रेकपॉइंट दुर्घटना का कारण बन जाएगा? – ransomweaver

+4

मुझे पता चला है कि आप ब्रेकपॉइंट मारने के बाद ही डीबगर में जारी रख सकते हैं। शायद एक अपवाद है जिसे ऐप्पल के कोड में पकड़ा और संभाला जा रहा है, इसलिए अपवाद के माध्यम से ब्रेकपॉइंट ट्रिगर करता है, इससे कोई दुर्घटना नहीं होती है। –

+1

यह "बग" मुझे पागल कर रहा था। उत्तर के लिए बहुत आभारी। –

9

मैं कुछ ऐसा देख रहा हूं - पीडीएफ लोड करने के बाद या पीडीएफ लोड करने के बाद एचटीएमएल लोड करते समय एक वेबव्यू मुक्त करना। यह तीसरा प्रतीत होता है: // 1043175 9 (http://openradar.appspot.com/10431759 देखें)। मेरे पास इसके आसपास काम करने का कोई तरीका नहीं है। मैं इसे पीडीएफ लोड करके और फिर HTML स्ट्रिंग @"<div></div>" लोड करके इसे पुन: उत्पन्न कर सकता हूं, इसलिए यह प्रतिनिधि प्रतिनिधि नहीं प्रतीत होता है।

आप gdb कंसोल में लिखते हैं, तो "bt", आप सहित वास्तविक स्टैकट्रेस मिल सकता है,:

#0 0x37ccd1c8 in objc_exception_throw() 
#1 0x381817b8 in +[NSException raise:format:arguments:]() 
#2 0x381817b8 in +[NSException raise:format:arguments:]() 
#3 0x381817da in +[NSException raise:format:]() 
#4 0x35462628 in -[NSObject(NSKeyValueObserverRegistration) _removeObserver:forProperty:]() 
#5 0x35462296 in -[NSObject(NSKeyValueObserverRegistration) removeObserver:forKeyPath:]() 
#6 0x31fc3448 in -[UIWebPDFView _removeBackgroundImageObserverIfNeeded:]() 
#7 0x31fc36a8 in -[UIWebPDFView dealloc]() 
#8 0x37cc90c4 in _objc_rootRelease() 
#9 0x31dd2614 in -[UIWebPDFViewHandler clearAllViews]() 
#10 0x31d76708 in -[UIWebPDFViewHandler _replacePDFViewIfPresentWithWebDocView:]() 
#11 0x31d766a6 in -[UIWebPDFViewHandler _removePDFViewIfWebDocViewIsNotPDF:]() 
#12 0x31d76644 in -[UIWebBrowserView webView:didFirstVisuallyNonEmptyLayoutInFrame:]() 

जब डिवाइस पर डीबगिंग, आप "फ्रेम 0" टाइप करें और "पो $ r0" कर सकते हैं अपवाद संदेश देखने के लिए: (मुझे लगता है कि यह "पो $ eax" है सिम्युलेटर में।)

(gdb) frame 0 
#0 0x37ccd1c8 in objc_exception_throw() 
(gdb) po $r0 
Cannot remove an observer <UIWebPDFView 0x4a3200> for the key path "backgroundImage" from <UIPDFPageView 0x4a4bf0> because it is not registered as an observer. 

संपादित करें: इस समस्या को केवल लगता है तब होता है जब मेरे पास है "फेंक पर तोड़" Objective- के लिए चालू सी अपवाद।

0

मेरे पास एक ही समस्या थी, मेरे UIWebView लटकने के साथ (केवल कताई "लोडिंग" सर्कल के साथ एक ग्रे स्क्रीन पर ठंड लगाना जो कभी समाप्त नहीं हुआ)। यदि मैं प्रोग्राम से बाहर निकलता हूं, तो यह दूसरी बार लोड होने पर इसे क्रैश कर देगा।

अंत में मैं काफी इसे में पता लगाने की थी और मैंने पाया है कि कि अगर मैं एक लेबल फ़ॉन्ट एप्लिकेशन संसाधन बंडल पहले से (एक CCLabelTTFCocos2d उपयोग करने के साथ) भरी हुई, तो पीडीएफ लोड करने का प्रयास चारों ओर घिसटते हुए, तो यह काम करेगा और दुर्घटनाग्रस्त नहीं होगा।

यह एक बहुत बदसूरत हैक है, लेकिन किसी और को यह उपयोगी लगेगा।

// HACK: Loading a TTF font first is needed to properly load PDF/HTML 
CCLabelTTF* label = [CCLabelTTF labelWithString:@"Testing" fontName:@"DIN-Black" fontSize:12]; 
[label setVisible:false]; 

// We never actually use the label -- we just create it so that it loads the font 
NSString *path = [[NSBundle mainBundle] 
        pathForResource:myPDF 
        ofType:@"pdf"]; 

CCLOG(@"Retrieving PDF from '%@'", path); 

NSURL *pdfUrl = [NSURL fileURLWithPath:path]; 
NSURLRequest *request = [NSURLRequest requestWithURL:pdfUrl]; 

[webView loadRequest:request]; 
[webView setScalesPageToFit:YES]; 
[super onEnter]; 
संबंधित मुद्दे