मैं एक अलग थ्रेड पर एक NSURLConnection चला रहा हूं (मुझे पता है कि यह असीमित है और मुख्य धागे पर चलते समय काम करता है), लेकिन यह प्रतिनिधि कॉल नहीं कर रहा है जब भी मैं प्रतिनिधि के रूप में पैरेंट थ्रेड पास करें। क्या किसी को भी यह करना आता है?पृथक धागे पर असिंक्रोनस NSURLConnection प्रतिनिधि विधियों को कॉल करने में विफल रहता है
कोड:
-(void)startConnectionWithUrlPath:(NSString*)URLpath {
//initiates the download connection - setup
NSURL *myURL = [[NSURL alloc] initWithString:URLpath];
myURLRequest = [NSMutableURLRequest requestWithURL:myURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];
[myURL release];
//initiates the download connection on a seperate thread
[NSThread detachNewThreadSelector:@selector(startDownloading:) toTarget:self withObject:self];
}
-(void)startDownloading:(id)parentThread {
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
[NSURLConnection connectionWithRequest:myURLRequest delegate:parentThread];
//The delegate methods are setup in the rest of the class but they are never getting called...
[pool drain];
}
संपादित *
कारण मैं एक अलग थ्रेड पर NSURLConnection चलाने की आवश्यकता है क्योंकि मैं अपने iPhone एप्लिकेशन में कुछ डाउनलोड करने की कर रहा हूँ और डाउनलोड को रद्द करता है जब उपयोगकर्ता स्क्रीन लॉक करता है (यह ठीक है अगर उपयोगकर्ता बस होम बटन दबाता है और ऐप पृष्ठभूमि में जाता है)। मैं समझता हूं कि यह मुख्य थ्रेड पर कनेक्शन को असीमित रूप से चलाने के कारण है और अलग नहीं है।
मैं भी इस कोड (एक अलग थ्रेड में नहीं) की कोशिश की है जब NSURLConnection की शुरुआत:
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:myURLRequest delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[connection start];
[connection release];
लेकिन यह मैं डाउनलोड स्क्रीन लॉक पर रद्द किया जा रहा के बारे में इस के साथ एक ही समस्या है।
* अद्यतन
नीचे थॉमस के जवाब देने के लिए जोड़ने के लिए (कृपया ध्यान दें कि जेम्स वेबस्टर जवाब भी एक धागे के बाहर निकल रहा है के बारे में सही है) एप्पल डॉक्स व्याख्या करते हैं: "निलंबित राज्य - ऐप्लिकेशन में है पृष्ठभूमि लेकिन कोड निष्पादित नहीं कर रहा है। सिस्टम ऐप्स को स्वचालित रूप से इस स्थिति में ले जाता है और ऐसा करने से पहले उन्हें सूचित नहीं करता है। निलंबित होने पर, एक ऐप स्मृति में रहता है लेकिन किसी भी कोड को निष्पादित नहीं करता है। "
चूंकि स्क्रीन को उपयोगकर्ता द्वारा लॉक किया जाता है, तब से ऐप पृष्ठभूमि स्थिति में डाल दिया जाता है और तुरंत निलंबित राज्य में डाल दिया जाता है, सभी निष्पादन किसी भी डाउनलोड को मारना बंद कर दिया जाता है और यह चेतावनी नहीं दी जाती है कि यह होने वाला है .. एक अधिसूचना हो सकती है जो मुझे बताती है कि उपयोगकर्ता ने स्क्रीन लॉक कर दी है लेकिन मुझे अभी तक कोई नहीं मिला है।
इसलिए ऐप पृष्ठभूमि में जाता है और जब यह फिर से सक्रिय हो जाता है तो इसे HTTP रेंज हेडर के साथ फिर से शुरू करने के लिए सभी डाउनलोड रोकें (NSRLConnection को रद्द करें)। यह एक कामकाज है जो ठीक है लेकिन आदर्श नहीं है क्योंकि डाउनलोड पृष्ठभूमि में नहीं हो रहा है जो उपयोगकर्ता अनुभव को नकारात्मक रूप से प्रभावित करता है ... बमर।
NSURLConnection अनुरोध के लिए आप जिस विधियों का उपयोग कर रहे हैं, वे स्वयं ही असीमित हैं, भले ही आप नए धागे को अलग नहीं करते हैं, यह बहुप्रचारित ऑपरेशन होगा। – Ravin
मेरे मुद्दे को बेहतर तरीके से समझाने के लिए संपादित प्रश्न। – Zigglzworth