iOS数据解析之get异步同步

pragma mark – get同步

  • (void)actionRightItem:(UIBarButtonItem *)button
    {
    // 创建网址对象
    NSString *oldUrl = @”http://api.map.baidu.com/place/v2/search?query=麦当劳®ion=新乡&output=json&ak=6E823f587c95f0148c19993539b99295”;

    // 如果请求的网址含中文,必须重新编码为NSUTF8StringEncoding
    NSString *newUrl = [oldUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    // 将字符串转换成url
    NSURL *url = [NSURL URLWithString:newUrl];
    // 发出一个请求
    // CachePolicy缓存策略 一般选默认
    // 1> NSURLRequestUseProtocolCachePolicy = 0, 默认的缓存策略, 如果缓存不存在,直接从服务端获取。
    2> NSURLRequestReloadIgnoringLocalCacheData = 1, 忽略本地缓存数据,直接请求服务端.
    3> NSURLRequestIgnoringLocalAndRemoteCacheData = 4, 忽略本地缓存,代理服务器以及其他中介,直接请求源服务端.
    4> NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData
    5> NSURLRequestReturnCacheDataElseLoad = 2, 有缓存就使用
    6> NSURLRequestReturnCacheDataDontLoad = 3,确定当前无网络时使用
    7> NSURLRequestReloadRevalidatingCacheData = 5, 缓存数据必须得得到服务端确认有效才使用
    // timeoutInterval 请求超时时间
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
    // 默认是get请求NSURLRequest 如果设置,需要的是可变请求NSMutableURLRequest
    // 设置请求类型
    [request setHTTPMethod:@”GET”];

    // 建立链接
    // 接收二进制数据
    // Response: 描述服务器返回的数据
    // error: 描述链接错误的信息
    // 如果不需要,可以直接填nil
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    NSLog(@”%@”, data);
    NSLog(@”%@”, response);

    // 转换成数据
    NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];
    NSLog(@”%@”, dataDic);
    }
    // get异步

  • (void)actionLeftItem:(UIBarButtonItem *)button
    {
    // 如果网址有中文 需要重新编码
    NSString *newUrl = [@”http://api.map.baidu.com/place/v2/search?query=麦当劳®ion=新乡&output=json&ak=6E823f587c95f0148c19993539b99295” stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    // 利用网址字符串创建一个网址对象 利用网址对象创建一个请求 利用请求创建一个链接
    NSURL *url = [NSURL URLWithString:newUrl];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:30.0];

    // 设置请求类型
    [request setHTTPMethod:@”GET”];

    // 注意:异步要遵循代理协议
    // 遵守的协议名字NSURLConnectionDataDelegate
    NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
    // 开启异步请求
    [connection start];
    }

pragma mark – NSURLConnectionDataDelegate —

  • (void)connection:(NSURLConnection )connection didReceiveResponse:(NSURLResponse )response
    {
    // 连接成功触发,在这个方法中初始化可变data
    NSLog(@”接收到服务器数组”);
    }

  • (void)connection:(NSURLConnection )connection didReceiveData:(NSData )data
    {
    // 在此处,拼接data
    // 可执行多次
    NSLog(@”接收数据时触发, 说明 链接成功”);
    }

  • (void)connectionDidFinishLoading:(NSURLConnection *)connection
    {
    // 该方法触发,证明data已经完整了,可以分析数据
    NSLog(@”完成加载”);
    }

  • (void)connection:(NSURLConnection )connection didFailWithError:(NSError )error
    {
    NSLog(@”查看错误信息”);
    }

你可能感兴趣的:(iOS)