iPhone網(wǎng)絡(luò)開發(fā)中如何使用NSURLConnection教程
iPhone網(wǎng)絡(luò)開發(fā)中如何使用NSURLConnection是本文要介紹的內(nèi)容,這篇文章是翻譯的蘋果官方文檔,想要看英文原版的可以到蘋果網(wǎng)站查看,來看詳細(xì)內(nèi)容。
NSURLConnection 提供了很多靈活的方法下載URL內(nèi)容也提供了一個(gè)簡單的接口去創(chuàng)建和放棄連接,同時(shí)使用很多的delegate方法去支持連接過程的反饋和控制
如何創(chuàng)建一個(gè)連接呢?
為了下載url的內(nèi)容,程序需要提供一個(gè)delegate對象,并且至少實(shí)現(xiàn)下面的方法
- connection:didReceiveResponse:,conncetion:didReceiveData,
- conncetion:didFailWithError:和connectionDidFinishLoading:
舉例一
1、先創(chuàng)建一個(gè)NSURL
2、在通過NSURL創(chuàng)建NSURLRequest,可以指定緩存規(guī)則和超時(shí)時(shí)間
3、創(chuàng)建NSURLConnection實(shí)例,指定NSURLRequest和一個(gè)delegate對象
如果創(chuàng)建失敗,則會(huì)返回nil,如果創(chuàng)建成功則創(chuàng)建一個(gè)NSMutalbeData的實(shí)例用來存儲(chǔ)數(shù)據(jù)
代碼:
- NSURLRequest *theRequest=[NSURLRequest requestWithURL:
- [NSURL URLWithString:@“http://www.sina.com.cn/”]
- cachePolicy:NSURLRequestUseProtocolCachePolicy
- timeoutInterval:60.0];
- NSURLConnection *theConncetion=[[NSURLConnection alloc]
- initWithRequest:theRequest delegate:self];
- if(theConnection)
- {
- //創(chuàng)建NSMutableData
- receivedData=[[NSMutableData data] retain];
- }else 創(chuàng)建失敗
NSURLConnection還有幾個(gè)初始化函數(shù),有個(gè)初始化函數(shù)可以做到創(chuàng)建連接但是并不馬上開始下載,而是通過start:開始
當(dāng)收到initWithRequest: delegate: 消息時(shí),下載會(huì)立即開始,在代理(delegate)收到connectionDidFinishLoading:或者connection:didFailWithError:消息之前可以通過給連接發(fā)送一個(gè)cancel:消息來中斷下載。
當(dāng)服務(wù)器提供了足夠客戶程序創(chuàng)建NSURLResponse對象的信息時(shí),代理對象會(huì)收到一個(gè)connection:didReceiveResponse:消息,在消息內(nèi)可以檢查NSURLResponse對象和確定數(shù)據(jù)的預(yù)期長途,mime類型,文件名以及其他服務(wù)器提供的元信息
要注意,一個(gè)簡單的連接也可能會(huì)收到多個(gè)connection:didReceiveResponse:消息當(dāng)服務(wù)器連接重置或者一些罕見的原因(比如多組mime文檔),代理都會(huì)收到該消息這時(shí)候應(yīng)該重置進(jìn)度指示,丟棄之前接收的數(shù)據(jù)
- -(void)connection:(NSURLConnection *)connectiondidReceiveResponse:
- (NSURLResponse*)response
- {
- [receiveData setLength:0];
- }
當(dāng)下載開始的時(shí)候,每當(dāng)有數(shù)據(jù)接收,代理會(huì)定期收到connection:didReceiveData:消息代理應(yīng)當(dāng)在實(shí)現(xiàn)中儲(chǔ)存新接收的數(shù)據(jù),下面的例子既是如此
- -(void) connection:(NSURLConnection*)connection didReceiveData:
- (NSData *) data
- {
- [receiveData appendData:data];
- }
在上面的方法實(shí)現(xiàn)中,可以加入一個(gè)進(jìn)度指示器,提示用戶下載進(jìn)度
當(dāng)下載的過程中有錯(cuò)誤發(fā)生的時(shí)候,代理會(huì)收到一個(gè)connection:didFailWithError消息,消息參數(shù)里面的NSError對象提供了具體的錯(cuò)誤細(xì)節(jié),它也能提供在用戶信息字典里面失敗的url請求(使用NSErrorFailingURLStringKey)
當(dāng)代理接收到連接的connection:didFailWithError消息后,對于該連接不會(huì)在收到任何消息
舉例
- -(void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error
- {
- [connection release];
- [receivedData release];
- NSLog(@"Connection failed! Error - %@ %@",
- [error localizedDescription],
- [[error userInfo] objectForKey:NSErrorFailingURLStringErrorKey]);
- }
***,如果連接請求成功的下載,代理會(huì)接收connectionDidFinishLoading:消息代理不會(huì)收到其他的消息了,在消息的實(shí)現(xiàn)中,應(yīng)該釋放掉連接
舉例:
- (void)connectionDidFinishLoading:(NSURLConnection*)connection
- {
- //do something with the data
- NSLog(@“succeeded %d byte received”,[receivedData length]);
- [connection release];
- [receivedData release];
- }
好的,初步的流程就是這些。
小結(jié):iPhone網(wǎng)絡(luò)開發(fā)中如何使用NSURLConnection教程的內(nèi)容介紹完了,希望本文對你有所幫助!