1. 程式人生 > >IOS成長之路-從網路讀取資料

IOS成長之路-從網路讀取資料

邏輯:

首先建立一個NSURL地址,傳送request請求,然後呼叫         

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

把下載的資料儲存到NSDate物件中,當下載完成後執行    

                       - (void)connectionDidFinishLoading:(NSURLConnection *)connection 方法,

假如連接出現錯誤:                     

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

實現:

//定義一個NSDate物件
NSMutableData *buffer;

/*=========------------------==============*/
- (void)viewDidLoad
{
    //呼叫down方法
    [self Down];
    //初始化 buffer
    buffer = [[NSMutableData alloc]init];
    [super viewDidLoad];
}

-(void) Down
{
    //建立url  
    NSURL *url = [NSURL URLWithString:@"http://192.168.67.3:8080/movie/3.mp4"];
    //基於http的連線請求
    NSURLRequest* request = [[NSURLRequest alloc]initWithURL:url];
    //建立 connection 會話
	NSURLConnection* connection = [[NSURLConnection alloc]initWithRequest:request 
                                                                 delegate:self];
    
    //釋放
	[connection release];
	[request release];
}
//提供一個NSData, 封裝了剛從連線上收到的位元組塊
//下載新增資料的時候會產生一個數據回撥(它是一部分一部分的下載),直到資料全部下載完成
- (void)connection:(NSURLConnection *)connection 
	didReceiveData:(NSMutableData *)data
{
    //buffer 是一個可以修改的data 資料,把從網路上下載的資料 data 新增進去
	[buffer appendData:data];
}

//基於http的會話已經完成會執行(就是下載完成)
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    //建立一個檔案,  指定路徑,名稱,和內容
    [[NSFileManager defaultManager]createFileAtPath:@"/tmp/movie.mp4" contents:buffer attributes:nil];
}

//當網路連線不成功或出現異常的時候會呼叫,提供一個NSError以解釋失敗的原因
- (void)connection:(NSURLConnection *)connection 
  didFailWithError:(NSError *)error
{
    //載入的是一個警告框
	UIAlertView *errorAlert = [[UIAlertView alloc]
							   initWithTitle: [error localizedDescription]
							   message: [error localizedFailureReason]
							   delegate:nil
							   cancelButtonTitle:@"OK"
							   otherButtonTitles:nil];
	[errorAlert show];
	[errorAlert release];
	
}