关于 iOS 获取网络数据
后台线程--》Retrieving Data Synchronously (同步)--》不推荐,必须保证不能在主线程中,if you attempt to perform those network operations synchronously on the main thread, the operations would block your app’s execution until the data has been completely received, an error occurs, or the request times out. This causes a poor user experience, and can cause iOS to terminate your app.
返回数据
if the request succeeds, the contents of the request are returned as an NSData
object and an NSURLResponse
object for the request is returned by reference. IfNSURLConnection
is unable to retrieve the URL, the method returns nil
and any available NSError
instance by reference in the appropriate parameter.
如果在请求中需要认证
If the request requires authentication to make the connection, valid credentials must already be available in the NSURLCredentialStorage
object or must be provided as part of the requested URL. If the credentials are not available or fail to authenticate, the URL loading system responds by sending the NSURLProtocol
subclass handling the connection a continueWithoutCredentialForAuthenticationChallenge:
message
异步 sendAsynchronousRequest:queue:completionHandler: 点击打开链接
//
// AJViewController.m
// GetWeather
//
// Created by cxj on 14-7-31.
// Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved.
//
#import "AJViewController.h"
@interface AJViewController ()
@end
@implementation AJViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)GetData:(id)sender {
NSError *error;
//加载一个NSURL对象
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.weather.com.cn/atad/101280501.html"]];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response,NSData *data,NSError *error) {
if ([data length] > 0 && error == nil)
{
NSString *html = [[NSString alloc]initWithData:data encoding:NSASCIIStringEncoding];
//操作
NSLog(@"%@",html);
NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error];
NSDictionary *weatherInfo = [weatherDic objectForKey:@"weatherinfo"];
NSString*result=[NSString stringWithFormat:@"今天是%@,%@ \n%@的天气状况是%@ %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]];
self.DataField.text =result;
NSLog(@"weatherInfo字典里面的内容为--》%@", weatherDic );
NSLog(@"%@",result);
}
else if ([data length] == 0 && error ==nil)
{
//没有数据
}
else if (error != nil)
{
//超时
}
else
{
}
}];
}
@end
//将请求的url数据放到NSData对象中
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
//解析类NSJSONSerialization从response中解析出数据放到字典中
NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
NSDictionary *weatherInfo = [weatherDic objectForKey:@"weatherinfo"];
NSString*result=[NSString stringWithFormat:@"今天是%@,%@ \n%@的天气状况是%@ %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]];
self.DataField.text =result;
NSLog(@"weatherInfo字典里面的内容为--》%@", weatherDic );
NSLog(result);
//
// AJViewController.m
// GetWeather
//
// Created by cxj on 14-7-31.
// Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved.
//
#import "AJViewController.h"
@interface AJViewController ()
@end
@implementation AJViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)GetData:(id)sender {
NSError *error;
//加载一个NSURL对象
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.weather.com.cn/atad/101280501.html"]];
//将请求的url数据放到NSData对象中
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
//解析类NSJSONSerialization从response中解析出数据放到字典中
NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
NSDictionary *weatherInfo = [weatherDic objectForKey:@"weatherinfo"];
NSString*result=[NSString stringWithFormat:@"今天是%@,%@ \n%@的天气状况是%@ %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]];
self.DataField.text =result;
NSLog(@"weatherInfo字典里面的内容为--》%@", weatherDic );
NSLog(@"%@",result);
}
@end