2012-02-10 9 views
14

के साथ असीमित NSRL कनेक्शन, मैं पृष्ठभूमि मोड में NSURLConnection करना चाहता हूं, क्योंकि प्रतिक्रिया में बहुत अधिक डेटा है। फ़ोरम didEnterBackground में उपयोग करने के लिए ऐप्पल की सीमित लंबाई कोडिंग का उपयोग करने के लिए कह रहे हैं। लेकिन मैं इसे से बचाना चाहता हूं। इसके बाद मैं NSOperation के माध्यम से NSInvocation के साथ निम्नलिखित कोड का उपयोग करता हूं, लेकिन यह काम नहीं कर रहा है। connectToServerNSURLConnection ऑपरेशन है। कृपया मदद करें? didReceiveData, didReceiveResponse प्रतिनिधि विधियों को नहीं कहा जाता है? कतार: completionHandler: sendAsynchronousRequest परNSOperation

NSOperationQueue *queue = [NSOperationQueue new]; 

NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self 
                     selector:@selector(connectToServer) 
                      object:nil]; 

[queue addOperation:operation]; 
[operation release]; 
[queue autorelease]; 

-(void)connectToServer 
{ 
NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; 
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 
NSURLConnection *theConnection = [[[NSURLConnection alloc] initWithRequest:theRequest delegate:self] autorelease]; 

    if(theConnection) 
    { 
     webData = [[NSMutableData data] retain]; 
    } 
    else 
    { 
     NSLog(@"theConnection is NULL"); 
    } 
} 
+0

आपका प्रश्न स्पष्ट नहीं है –

+0

कृपया मेरा संपादित प्रश्न देखें? – nameless

उत्तर

42

प्रश्न इस प्रकार का एक असंख्य समय कहा गया था। प्रतिनिधियों को बुलाया नहीं जा रहा है क्योंकि आईओएस 4 ऑपरेशंस माध्यमिक धागे पर शुरू हो गए हैं। प्रतिनिधियों को ये सब कहा जाता है इससे पहले थ्रेड शायद बाहर निकलता है।

मुख्य धागे पर कनेक्शन रखें और जीसीडी का उपयोग कर पृष्ठभूमि धागे में डेटा को संभाल लें। http://cocoaintheshell.com/2011/04/nsurlconnection-synchronous-asynchronous/

संपादित करें: अपडेट किया गया लिंक

I'v यह सब सामान यहाँ के बारे में लिखा।

+2

मेरी हार्ड अर्जित 50 वोटों का आनंद लें। मुझे अपने बक्षीस से पहले जवाब देना चाहिए :) – nameless

+0

क्या आप कृपया बता सकते हैं कि रनलोप और बंदरगाह को कैसे रोकें? – nameless

+5

[runLoop removePort: पोर्ट के लिए मोड: मोड]; CFRunLoopStop (CFRunLoopGetCurrent()); – Nyx0uf

0

देखो विधि here in Apple's Documentation प्रलेखित। यह NSURLConnection के साथ एसिंक्रोनस अनुरोधों की अनुमति देता है।

नोट इस iOS5 या आवश्यकता है उच्च

+0

मुझे आशा है कि यह मैक के लिए केवल – nameless

+0

मैक के लिए पहला लिंक था, मैंने इसे आईओएस संस्करण के लिए अपडेट किया है। क्या आप मैक संदर्भ चाहते हैं? मैक प्रलेखन यहां पाया जा सकता है: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html#//apple_ref/doc/uid/20001697- DontLinkElementID_1 –

+0

मैं आईओएस 4 में करना चाहता हूं .. मेरे सवाल का जवाब दें कि यह क्यों काम नहीं कर रहा है? – nameless

6

ऐप्पल QHTTPOperation प्रदान करता है, जो केवल वही करता है जो को NSOperation के भीतर एक अनुरोध के लिए encapsulates करता है। आप इसे ऐप्पल के sample code में पा सकते हैं।

QHTTPOperation वास्तव में QRunLoopOperation का उप-वर्ग है जो आपको तर्क को समाहित करने देता है जो एनएसओपरेशन में रन-लूप कॉलबैक पर निर्भर करता है।

तृतीय पक्ष ASIHTTPRequest एक समान लोकप्रिय समाधान है, AFAIK इसे अब बनाए रखा नहीं गया है।

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