ios開發之網絡編程(請求--響應)


這邊我就以最簡單的例子來引入幾個常用的API中的類。
[cpp] 
// 
//  NLViewController.m 
//  NetWorkTest 
// 
//  Created by Nono on 12-5-16. 
//  Copyright (c) 2012年 NonoWithLilith. All rights reserved. 
// 
#import "NLViewController.h" 
 
@interface NLViewController () 
 
@end 
 
@implementation NLViewController 
@synthesize label = _label; 
@synthesize data = _data; 
@synthesize connection = _connection; 
- (void)dealloc{ 
    [self.label release]; 
    [self.data release]; 
    [super dealloc]; 

- (void)viewDidLoad 

    [super viewDidLoad]; 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 10.0, 300.0, 400)]; 
    self.label = label; 
    label.textAlignment = UITextAlignmentCenter; 
    [label setNumberOfLines:0]; 
    label.lineBreakMode = UILineBreakModeWordWrap;  
    self.label.text = @"正在在請求數據"; 
    [self.view addSubview:label]; 
    [label release]; 
    //step 1:請求地址 
    NSString *urlString = @"www.2cto.com"; 
    NSURL *url = [NSURL URLWithString:urlString]; 
    //step 2:實例化一個request 
    NSURLRequest *requrst = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; 
    //step 3:創建鏈接 
    self.connection = [[NSURLConnection alloc] initWithRequest:requrst delegate:self]; 
    if ( self.connection) { 
        NSLog(@"鏈接成功"); 
    }else { 
        NSLog(@"鏈接失敗"); 
    } 
     
    [url release]; 
    [urlString release]; 
    [requrst release]; 
    // Do any additional setup after loading the view, typically from a nib. 

 
- (void)viewDidUnload 

    self.label = nil; 
    self.data = nil; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 

 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 

 
#pragma mark- 
#pragma NSUrlConnectionDelegate methods 
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 

    //接受一個服務端回話,再次一般初始化接受數據的對象 
    
    NSLog(@"返回數據類型:%@",[response textEncodingName]);  
    NSMutableData *d = [[NSMutableData alloc] init]; 
     self.data = d; 
    [d release]; 

 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 

    //接受返回數據,這個方法可能會被調用多次,因此將多次返回數據加起來 
     
    NSUInteger datalength = [data length]; 
    NSLog(@"返回數據量:%d",datalength); 
    [self.data appendData:data]; 

 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

    //連接結束 
     
    NSLog(@"%d:",[self.data length]); 
    NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); 
    NSString *mystr = [[NSString alloc] initWithData:_data encoding:enc]; 
   // string i 
    NSLog(@"最后的結果:%@",mystr); 
    self.label.text = mystr; 
    [mystr release]; 
    [self.connection release]; 

 
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 

    //鏈接錯誤 

 
@end 
簡單說下:
1.最簡單的網絡鏈接,一個url,一個request,一個connection以及一個response返回。默認的是get請求。
2.data轉碼問題,這個一開始有點糾結。即,在最后我們要把NSData轉化成NSString時候需要一個轉碼格式,一開始我習慣性的用了UTF-8,
然后發現轉化后String 是Null,於是去打印了下請求返回的一些參數,顯示的是GB2312~。
然后NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
    NSString *mystr = [[NSString alloc] initWithData:_data encoding:enc];
就ok了。
4.代理方法的實現,基本以上幾個都需要實現吧。還有更多可選方法可以根據自身需要去選擇性實現。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM