異步網絡解析不能套異步網絡解析
// 網絡編程
// 完整的網路請求總體上分三步
/*
1. nsurl 創建網絡 請求地址
2. nsurlrequest 創建網絡請求
3. nsurlconnection 創建網絡鏈接
*/
// 1.url
NSURL *url = [NSURL URLWithString:@”http://bea.wufazhuce.com/OneForWeb/one/getC_N?strDate=2015-08-09&strRow=1&strMS=1“];
// get: NSURLRequest 不可變的網路請求對象,就是 get 請求.特點1.通過網址傳輸,最大255字節,明文可見
NSURLRequest *get_request= [[NSURLRequest alloc]initWithURL:url cachePolicy:0 timeoutInterval:10];// url 緩衝策略 最長請求時間
// post 特點 data 傳輸,最大1g, 二進制文件
NSURL *url2 = [NSURL URLWithString:@”http://bea.wufazhuce.com/OneForWeb/one/getC_N“];
NSData *data1 = [@”strDate=2015-08-09&strRow=1&strMS=1” dataUsingEncoding:NSUTF8StringEncoding ];
// 此處是NSMutableURLRequest 爲 post 所用
NSMutableURLRequest *post_request = [[NSMutableURLRequest alloc]initWithURL:url2 cachePolicy:0 timeoutInterval:10];
[post_request setHTTPMethod:@”post”];// 設置請求方法爲 post
[post_request setHTTPBody:data1]; // 設置要請求什麼數據
// 3.建立鏈接
// 同步鏈接 建立鏈接 同步鏈接等待,服務器響應,成功則返回數據,失敗者返回失敗數據
NSURLResponse *response = nil;
NSError *error = nil;
// 返回請求得到的數據
NSData *data3 = [NSURLConnection sendSynchronousRequest:get_request returningResponse:&response error:&error];
NSDictionary *rootDic2 = [NSJSONSerialization JSONObjectWithData:data3 options:0 error:nil];// 可以解析解析了
// 異步網絡請求鏈接 分 delegate 和 block兩種方法
// block
// sendAsynchronous 三個參數 1.request 請求對象 2.queue 數據請求完成後返回的線程, 3.^block 把請求完成的數據毀掉給 ViewController
[NSURLConnection sendAsynchronousRequest:get_request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
//解析 或者執行其他操作 可以將解析後的數據賦給系統屬性 使用的是 JSON 解析
NSDictionary *rootDic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSDictionary *contentEntityDic = [rootDic objectForKey:@"contentEntity"];
}];
// 第二種異步鏈接請求方式 delegate 代理. 代理的優點:追蹤請求過程 <NSURLConnectionDelegate,NSURLConnectionDataDelegate>
// 1. NSURLRequest *request = [[NSURLRequest alloc] initWithURL:acitvityListURL cachePolicy:0 timeoutInterval:10];
// [[NSURLConnection alloc]initWithRequest:get_request delegate:self];
// 2.使用便利構造嗎器 通常使用這種方法
// [NSURLConnection connectionWithRequest:get_request delegate:self];
}
- (void)connection:(NSURLConnection )connection didReceiveResponse:(NSURLResponse )response
{// 鏈接成功 打印迴應 初始化 data
self.doubanData = [NSMutableData data];
} (void)connection:(NSURLConnection )connection didReceiveData:(NSData )data
{
NSLog(@”正在接受數據”);
[self.doubanData appendData:data];// 將剛得到數據添加到原來的數據後面
}(void)connectionDidFinishLoading:(NSURLConnection *)connection
{// 網絡請求結束後 可以進行解析
NSDictionary *doudic1 = [NSJSONSerialization JSONObjectWithData:self.doubanData options:0 error:nil];
NSArray *arr = [doudic1 objectForKey:@”events”];
}
pragma mark- NSURLConnectionDelegate
- (void)connection:(NSURLConnection )connection didFailWithError:(NSError )error
{// 當網絡鏈接錯誤
NSLog(@”網絡異常”);
}