2015-09-07 7 views
17

में पदावनत मैं एक NSURLRequest के साथ एक फ़ाइल डाउनलोड करने और इसे बचाने के लिए चाहते हैं, लेकिनNSURLConnection iOS9

NSData * data = ... के साथ लाइन में एक त्रुटि होता है।

NSURL *Urlstring = [NSURL URLWithString:@"http://yourdomain.com/yourfile.pdf"]; 
NSURLRequest *request = [NSURLRequest requestWithURL: Urlstring]; 
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
documentsURL = [documentsURL URLByAppendingPathComponent:@"localFile.pdf"]; 

[data writeToURL:documentsURL atomically:YES]; 

चेतावनी संदेश है कि मैं NSURLSession dataTaskwithrequest का उपयोग करना चाहिए "क्योंकि sendSynchronousRequest आईओएस 9 में हटा दिया गया है, लेकिन वह काम नहीं करता मुझे आशा है कि कोई मुझे

+2

"बहिष्कृत" कोई त्रुटि नहीं है। यह एक चेतावनी है कि भविष्य में कुछ दूर जा रहा है। यदि आपके पास वास्तविक त्रुटि है, तो शायद यह एक अलग कारण के लिए है। –

+0

सूखी आप – Maximilian

उत्तर

32

अब मदद कर सकते हैं NSURLSession

उपयोग करने के लिए है उदाहरण (जीईटी):

-(void)placeGetRequest:(NSString *)action withHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))ourBlock { 

    NSString *urlString = [NSString stringWithFormat:@"%@/%@", URL_API, action]; 


    NSURL *url = [NSURL URLWithString:urlString]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

    [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:ourBlock] resume]; 
} 

अब आप कॉल करना होगा एक विधि के साथ वह विधि (या यदि आप चाहें तो आपका पूरा यूआरएल) और एपीआई कॉल रिटर्न के दौरान ब्लॉक किया जाएगा।

[self placeGetRequest:@"action" withHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
    // your code 
}]; 

कि ब्लॉक के अंदर, आप प्रतिक्रिया डेटा के साथ एक NSData और NSURLResponse HTTP प्रतिसाद के साथ प्राप्त होगा। तो अब, आप अपने कोड डाल कर सकते हैं:

NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
documentsURL = [documentsURL URLByAppendingPathComponent:@"localFile.pdf"]; 

[data writeToURL:documentsURL atomically:YES]; 

NSURLSession और NSURLConnection के बीच

  • NSURLConnection मुख्य अंतर: अगर हम NSURLConnection और सिस्टम के साथ एक खुले कनेक्शन है हमारे अनुप्रयोग, जब बीच में हमारी ऐप पृष्ठभूमि मोड में जाती है, जो कुछ भी हमें प्राप्त या भेजा गया है, वह खो गया था। Process diagram for NSURLConnection

  • NSURL सत्र: इस समस्या को हल करें और हमें प्रक्रिया डाउनलोड से बाहर भी दें। यह कनेक्शन प्रक्रिया का प्रबंधन करता है, भले ही हमारे पास पहुंच न हो। आप अपने AppDelegate Process diagram for NSURLSession

में application:handleEventsForBackgroundURLSession:completionHandler का उपयोग करने की आवश्यकता होगी तो NSURLSession के उपयोग के साथ, आप का प्रबंधन करने के लिए या आपके इंटरनेट कनेक्शन की जांच करने के ओएस आप के लिए यह करता है क्योंकि जरूरत नहीं है।

+0

ठीक हैं धन्यवाद, लेकिन हमारा ब्लैक क्या है यह बताता है कि अविकसित पहचानकर्ता – Maximilian

+0

ओह हाँ! हमाराब्लॉक एक ब्लॉक है जिसे आपको परिभाषित करना है। इसमें उस स्रोत कोड को शामिल करना चाहिए जिसे आप एपीआई कॉल समाप्त होने पर निष्पादित करना चाहते हैं। मैं आपको पूरा उदाहरण – EnriMR

+0

@ मैक्सिमिलियन देने के लिए अपना उत्तर संपादित करूंगा, अब मेरे अपडेट किए गए उत्तर की जांच करें और इसे अपने प्रोजेक्ट – EnriMR