UIWebView आपको सामान्य मोड में कोई प्रगति जानकारी नहीं देता है। आपको जो करना है वह पहले NSRLConnection का उपयोग करके अपने डेटा को असीमित रूप से लाता है। जब NSURLConnection प्रतिनिधि विधि connection:didReceiveResponse
, तो आपको expectedContentLength
से प्राप्त होने वाली संख्या लेने जा रहे हैं और इसे अपने अधिकतम मान के रूप में उपयोग करें। फिर, प्रतिनिधि विधि connection:didReceiveData
के अंदर, आप एनएसडीएटी इंस्टेंस की length
संपत्ति का उपयोग करने जा रहे हैं ताकि आपको यह बताने के लिए कि आप कितने दूर हैं, इसलिए आपका प्रगति अंश length/maxLength
होगा, जो सामान्यतः 0.0 और 1.0 के बीच होगा।
अंत में, आप एक यूआरएल के बजाय डेटा के साथ वेबव्यू में प्रवेश करने जा रहे हैं (आपके connection:didFinishLoading
प्रतिनिधि विधि में)।
दो चेतावनियां:
यह संभव है कि NSURLResponse की expectedContentLength
संपत्ति -1 (NSURLReponseUnknownLength
निरंतर) होने जा रहा है है। उस स्थिति में, मैं एक मानक यूआईएक्टिविटी इंडिकेटर को फेंकने का सुझाव दूंगा कि आपने connection:didFinishLoading
के अंदर बंद कर दिया है।
सुनिश्चित करें कि जब भी आप NSURLConnection प्रतिनिधि विधियों में से किसी एक से दृश्य नियंत्रण में हेरफेर करते हैं, तो आप performSelectorOnMainThread:
पर कॉल करके ऐसा करते हैं - अन्यथा आप डरावनी EXC_BAD_ACCESS त्रुटियां प्राप्त करना शुरू कर देंगे।
इस तकनीक का उपयोग करके आप एक प्रगति बार दिखा सकते हैं जब आप जानते हैं कि आप कितना डेटा प्राप्त करने के लिए माना जाता रहे हैं, और एक स्पिनर जब आप पता नहीं है।
स्रोत
2009-12-15 13:39:36
UIWebView लोड अनुरोध के शीर्ष पर NSURLConnection डेटा लाने के साथ समस्या यह है कि आप एक ही डेटा को दो बार पकड़ रहे हैं, जो हल्के कनेक्शन पर अपर्याप्त है। आप NSWataView को सीधे UIWebView में लोड कर सकते हैं 'लोडडाटा: MIMEType: textEncodingName: baseURL:', लेकिन यह UIWebView का उपयोग करने के अन्य पहलुओं से समझौता कर सकता है। –