2012-06-19 16 views
13

मैं एक ऐसा एप्लिकेशन बना रहा हूं जिसमें मैं सर्वर से कुछ डेटा डाउनलोड कर रहा हूं। पृष्ठभूमि में जाने के दौरान मैं चाहता हूं कि कनेक्शन चलना जारी रखना चाहिए ताकि डेटा डाउनलोड किया जा सके। मुझे पता है कि AppDelegateपृष्ठभूमि में डाउनलोड जारी रखें

- (void)applicationDidEnterBackground:(UIApplication *)application 

जो जब आवेदन पृष्ठभूमि में प्रवेश करती है कहा जाता है में विधि है। लेकिन चूंकि कनेक्शन कंट्रोलर में बनाया गया है, तो इसे ऐपडिलेगेट में कैसे प्रबंधित किया जा सकता है?
यह भी किया जा सकता है/क्या यह अन्य तरीकों से किया जा सकता है? मैं this लिंक से गुजर चुका हूं लेकिन क्या कार्यान्वित करने के लिए कुछ आसान है?

+0

कि यह करने के लिए सरकारी तरीका है, thre कोई अन्य तरीके के रूप में ज्यादा के रूप में मैं जानता हूँ –

+0

आप इस लिंक की जाँच करनी चाहिए रहे हैं http://stackoverflow.com/questions/4579810/ios-application-background-downloading – swiftBoy

उत्तर

14

पृष्ठभूमि में जारी कुछ संचालन करने का एक तरीका है डाउनलोड करने के लिए एक अलग थ्रेड बनाना। थ्रेड के अंदर, कॉल करने के लिए कॉल के बीच अपने डाउनलोड ऑपरेशंस को ब्रैकेट करें बैकग्राउंड टास्कविथ एक्सपेरेशन हैंडलर: और एंडबैकग्राउंड टास्क। आपको यह देखने की आवश्यकता नहीं है कि आप पृष्ठभूमि में चल रहे हैं या नहीं, आप हमेशा इन दो तरीकों को कॉल करते हैं।

// Tell iOS this as a background task in case we get backgrounded 
UIBackgroundTaskIdentifier taskId = [[UIApplication sharedApplication] 
      beginBackgroundTaskWithExpirationHandler:NULL]; 

//---------------------------------------------- 
// Perform your download operations here 
//---------------------------------------------- 
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 

// Tell iOS that we are done with stuff that needed to keep going even if backgrounded  
[[UIApplication sharedApplication] endBackgroundTask:taskId]; 
+1

आप ASIHttpRequest संपत्ति सेट कर सकते हैं: [अनुरोध setShouldContinueWhenAppEntersBackground: YES]; – HelloWorld

+0

आपको बहुत बहुत धन्यवाद !!! यदि मैं गलत हूं तो कृपया मुझे सही करें: निष्कर्ष निकालने के लिए, पृष्ठभूमि या अग्रभूमि में कार्य चलाने के बीच लगभग कोई अंतर नहीं है। दोनों इस कोड के साथ निष्पादित करेंगे। फिर भी 2 मतभेद दिमाग में आते हैं: 1।** यदि ** आपका पृष्ठभूमि कार्य बहुत लंबा है, तो हो सकता है कि आप इसे खत्म करने से पहले समाप्त कर दें! 2. 'बैकग्राउंड टास्क: टास्क आईडी' के लिए बेहतर है ताकि आप अतिरिक्त बैटरी बचा सकें। – Honey

4

[संपादित करें] खेद है कि मैं गलत था, क्योंकि टिप्पणी आप समय सीमा आप एक बार कार्रवाई करने/करने से पहले अपने एप्लिकेशन को पृष्ठभूमि में चला जाता है है का विस्तार कर सकते में बताया गया था। यहां Apple's Official Documentation

+0

यह सच नहीं है, तो आप एक [परिमित-लंबाई कार्य] निष्पादित कर सकते हैं (http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/ डॉक/यूआईडी/टीपी 40007072-सीएच 4-एसडब्ल्यू 28) पृष्ठभूमि में अधिकतम 10 मिनट के लिए। – rckoenes

+0

@ रेकोनिस आप वास्तव में सही हैं, मेरी माफ़ी। मैं अपना जवाब संपादित करूंगा। जानकारी :) – bennythemink

+0

फिर भी के लिए धन्यवाद सच नहीं है, तो आप कॉल कर सकते हैं [ 'beginBackgroundTaskWithExpirationHandler:'] (http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html# // apple_ref/occ/instm/UIAplplication/startBackgroundTaskWithExpirationHandler :) Finite-length कार्य निष्पादित करने से पहले। पृष्ठभूमि में जाने के बाद आपको संचालन करने की आवश्यकता नहीं है। आपके ऐप को पृष्ठभूमि में धक्का देने से पहले आप कार्य शुरू कर सकते हैं। – rckoenes

1

मुझे नहीं पता कि आप अपने डेटा को ठीक तरह से डाउनलोड कैसे करते हैं। लेकिन आप ASIHTTPRequest पर एक नज़र डाल सकते हैं। यह बहुत सरल और सीधा है, और एआरसी के साथ काम करता है यदि आप कंपाइलर झंडे को -fno-objc-arc पर सेट करते हैं। इसके साथ आपको केवल

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
[request setShouldContinueWhenAppEntersBackground:YES]; //For iOS 4.0 and up 

और यह काम करता है।

Here आप देख सकते हैं कि ASIHTTPRequest काम करता है

आशा है कि यह मदद करता है!

+0

ASIHTTPRequest सक्रिय रूप से विकसित नहीं किया गया है ... संदेश के अनुसार [http://allseeing-i.com/ASIHTTPRequest/)। बस केह रहा हू। – zero0cool

+0

सच है, लेकिन यह अभी भी एक आकर्षण की तरह काम करता है। मुझे ASIHTTPRequest जितनी कार्यक्षमता के साथ कोई अच्छा विकल्प नहीं मिला है। – Thermometer