文档章节

iOS-UIWebView 请求百度数据加载到页面 同步/异步/NSURLSession

ArtemisFang
 ArtemisFang
发布于 2016/02/16 15:31
字数 654
阅读 32
收藏 0
@interface ViewController ()<NSURLConnectionDelegate,NSURLConnectionDataDelegate>

{
    NSMutableData *netData; // 拼装网络数据
}

@end


@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
    // 在iOS开发里 Connetcion和session 是在foundation框架里面数据同一层级,不同的地方就是7.0以后Session 更多的是在后台请求方面做了很大的优化,还有就是本地存储的优化
//    NSURLConnection
//    NSURLSession


//  -----------异步加载网络数据---------
    // 初始化一个网络地址对象
    NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];
    
    // 初始化一次网络请求
    NSURLRequest *request=[NSURLRequest requestWithURL:url];
    
    // 拼装网络请求的数据
    netData=[[NSMutableData alloc]init];
    
    //初始化网络请求链接
//    NSURLConnection *connection=[[NSURLConnection alloc]initWithRequest:request delegate:self];
////     开始请求
//    [connection start];

    
// ---------------同步加载数据--------------
    // 同步加载网络数据
//    NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.baidu.com"]];
//    NSString *s=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    
//    NSLog(@"%@",s);
    
//  同步和异步的区别
//  同步去做网络数据请求的时候,必须得等数据请求下来才能做其他的操作,在数据没有下载下来之前都会卡住界面,不会执行下面的代码
//  异步异步数据请求的时候,不会卡住主界面,一边做数据请求一边还可以做其他代码操作
    
//    UIImage *image=[UIImage imageWithData:data];
//    UIImageView *image_V=[[UIImageView alloc]initWithFrame:self.view.bounds];
//    [image_V setImage:image];
//    [self.view addSubview:image_V];
 
    
//    ------------NSURLSession---------
    // NSURLSession 是iOS 7之后苹果比叫推崇的网络请求方式,是苹果自己封装的网络请求,以block方式返回数据
   
    NSURL *sessionUrl=[NSURL URLWithString:@"http://1000phone.net:8088/app/iAppFree/api/limited.php?page=1&number=20"];
    NSURLRequest *sessionRequest=[NSURLRequest requestWithURL:sessionUrl];
    // 创建一个Session网络请求 
   NSURLSession *session=[NSURLSession sharedSession];
    // 创建一次网络数据请求的任务
    NSURLSessionDataTask *task=[session dataTaskWithRequest:sessionRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        
//        NSString *s=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
//        NSLog(@"%@",s);
        // 把网络请求的JSON数据转换成NSDictionary
        NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
        
        NSString *count=dic[@"count"];
        NSArray *applist=dic[@"applications"];
        NSDictionary *appInfo=applist.firstObject;
        NSString *name=appInfo[@"name"];
        
        
        NSLog(@"%@",count);
//        NSLog(@"%@",applist);
        NSLog(@"%@",appInfo);
        
        
    }];
    
    //提交任务
    [task resume];
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark ---网络请求的代理

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    NSLog(@"网络请求错误");
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    NSLog(@"接受到数据");
    NSLog(@"下载的数据%ld",data.length);
    [netData appendData:data];// 把每一次请求的数据,放到我的内存里面
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    NSLog(@"第一次建立连接完成");
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
    NSLog(@"网络请求完成");
    
    // 把请求完成的二进制数据转换成字符串数据
    NSString *baiduHtml=[[NSString alloc]initWithData:netData encoding:NSUTF8StringEncoding];
    // 打印数据
    NSLog(@"百度首页的数据:%@",baiduHtml);
//    
    UIWebView *web=[[UIWebView alloc]initWithFrame:self.view.bounds];
    [self.view addSubview:web];
    // 字符串的方法加载web页面
    [web loadHTMLString:baiduHtml baseURL:nil];
//    
}

© 著作权归作者所有

ArtemisFang
粉丝 2
博文 22
码字总数 4901
作品 0
武汉
私信 提问
iOS与JS交互之UIWebView-协议拦截

级别:★★☆☆☆ 标签:「iOS与JS交互」「UIWebView与JS交互」「UIWebView拦截协议」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),J...

QiShare
2018/08/28
0
0
cordova与ios native code交互的原理

很早以前写了一篇博客,总结cordova插件怎么调用到原生代码: cordova调用过程,不过写得太水,基本没有提到原理。最近加深了一点理解,重新补充说明一下 js调用native 下面是我们产品中的代...

Michaelyn
2017/10/23
0
0
iOS中UIWebView的使用详解

iOS中UIWebView的使用详解 一、初始化与三种加载方式 UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种: 第一种: - (voi...

珲少
2015/06/23
0
1
iOS原生和H5混合开发,发现有时候在第一次安装APP,进入到混合开发模式页面,UIWebView页面已经加载完了,但是显示空白

最近在做iOS原生和H5混合开发,发现有时候在第一次安装APP,进入到混合开发模式页面,UIWebView页面已经加载完了,但是显示空白。试了一种方案,已经没有再现过这个问题。但是原因不明,不知...

saxon134
2016/04/14
2K
0
(转)ASIHTTPRequest类库简介和使用说明

官方网站: http://allseeing-i.com/ASIHTTPRequest/ 。 可以从上面下载到最新源码,以及获取到相关的资料。 使用iOS SDK中的HTTP网络请求API,相当的复杂,调用很繁琐,ASIHTTPRequest就是一...

ioser
2011/06/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins系列_插件安装及报错处理

进入Jenkins之后我们可以进行插件的安装,插件管理位于以下模块: 发现上面报了一堆错误,是因为插件的依赖没有安装好,那么这一节,就先把这些错误解决掉吧。解决完成后,也就基本会使用插件...

shzwork
今天
2
0
mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)

查询所有字段 select * from 表名; 查询自定字段 select 字段名 from 表名; 查询指定数据 select * from 表名 where 条件; 带关键字IN的查询 select * from 表名 where 条件 [not] in(元素...

edison_kwok
昨天
9
0
多线程同时加载缓存实现

import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorServi......

暗中观察
昨天
3
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
昨天
2
0
组装一台工作游戏两用机

一、配置清单如下: 分类 项目 价格(元) 主板 华硕(ASUS)TUF Z370-PLUS GAMING II 电竞特工 Z370二代 支持9代CPU 1049 CPU 英特尔(Intel) i7 8700K 酷睿六核 盒装CPU处理器 2640 风扇 九...

mbzhong
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部