资讯专栏INFORMATION COLUMN

IOS 7 利用系统自带库进行 POST JSON 异步访问操作

lei___ / 2277人阅读

摘要:在上篇文章中我谈到了使用等开源库进行到服务器的操作。但是又不想学习其它的库操作,于是尝试使用系统自带的库进行操作。

在上篇文章中我谈到了使用 ASIHTTPRequest JSONKit 等开源库进行 POST JSON 到服务器的操作。IOS 使用 POST、GET 提交 JSON 数据到服务器由于在后续的开发中发现了一些问题(Stack overflow)Use ASIHTTPRequest to startAsynchronous and update UITableView but failed with EXC_BAD_ACCESS经过外国友人提示:ASIHTTPRequest 已经停止维护、在 IOS 7中存在已知 bug 。同时@未解 同学也建议我采用 AFNetworking。但是又不想学习其它的库操作,于是尝试使用系统自带的库进行 POST 操作。

(void)PostJson{

__block NSMutableDictionary *resultsDictionary;
/*
* 这里 __block 修饰符必须要 因为这个变量要放在 block 中使用
*/
NSDictionary *userDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"first title", @"title",@"1",@"blog_id", nil];//假设要上传的 JSON 数据结构为 {"title":"first title","blog_id":"1"}
if ([NSJSONSerialization isValidJSONObject:userDictionary])//判断是否有效
{
    NSError* error;
    NSData* jsonData = [NSJSONSerialization dataWithJSONObject:userDictionary options:NSJSONWritingPrettyPrinted error: &error];//利用系统自带 JSON 工具封装 JSON 数据
    NSURL* url = [NSURL URLWithString:@"www.google.com"];
    NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
    [request setHTTPMethod:@"POST"];//设置为 POST 
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:[NSString stringWithFormat:@"%d",[jsonData length]] forHTTPHeaderField:@"Content-length"];
    [request setHTTPBody:jsonData];//把刚才封装的 JSON 数据塞进去
     __block NSError *error1 = [[NSError alloc] init];

     /*
     *发起异步访问网络操作 并用 block 操作回调函数
     */
    [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse* response,NSData* data,NSError* error)
    {
        if ([data length]>0 && error == nil) {
            resultsDictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error1];
            NSLog(@"resultsDictionary is %@",resultsDictionary);

        }else if ([data length]==0 && error ==nil){
            NSLog(@" 下载 data 为空");
        }
        else if( error!=nil){
            NSLog(@" error is %@",error);

        }
    }];
        }
    }
   }

事实上,我把这三行注释掉也是可以的,不知道为什么,请知道去掉会有什么影响的朋友告知我。

    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:[NSString stringWithFormat:@"%d",[jsonData length]] forHTTPHeaderField:@"Content-length"];

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/15575.html

相关文章

  • 移动端开发新趋势Flutter

    摘要:在函数内部,会调用函数,函数内部会扫描修改的文件,并将文件修改前后进行对比,随后会将被改动的代码生成一个文件。随后会通过将生成的文件发送给虚拟机,虚拟机拿到文件后会调用函数进行资源重载,将文件注入正在运行的中。 该文章属于原创,转载请注明: https://www.jianshu.com/p/1a90adc09e99 showImg(https://segmentfault.com...

    Baaaan 评论0 收藏0
  • Flutter通用基础flutter_luakit_plugin

    摘要:异步长连接功能也是很多开发所依赖的,只支持协议,如果想使用基础的协议,那就要使用提供的功能了,使用也非常简单,,在里面拿到数据后可以使用上文提到的通知机制把数据传回到层。 使用flutter_luakit_plugin作为基础库开发flutter应用 文章开头我们先开门见山给出使用flutter_luakit_plugin作为基础库开发和普通flutter的区别。由于flutter定位...

    william 评论0 收藏0
  • Flutter通用基础flutter_luakit_plugin

    摘要:异步长连接功能也是很多开发所依赖的,只支持协议,如果想使用基础的协议,那就要使用提供的功能了,使用也非常简单,,在里面拿到数据后可以使用上文提到的通知机制把数据传回到层。 使用flutter_luakit_plugin作为基础库开发flutter应用 文章开头我们先开门见山给出使用flutter_luakit_plugin作为基础库开发和普通flutter的区别。由于flutter定位...

    Ashin 评论0 收藏0
  • 超赞!快来用Python的搭建你的AI老婆吧!

    摘要:夏天太热,又不想出门,就让我们用的来搭建属于自己的可以对话的老婆吧本文拟使用的开发语言实现类似于的平台的小娜,或者是下的的。 夏天太热,又不想出门,就让我们用的Python来搭建属于自己的〜可以对话的AI老婆吧〜   本文拟使用Python的开发语言实现类似于的WIndows平台的小娜,或者是IOS下的Siri的。最终达到人机对话的效果。 showImg(https://segment...

    Tychio 评论0 收藏0
  • 慕课网_《iOS基础教程-数据解析》学习总结

    摘要:时间年月日星期五说明本文部分内容均来自慕课网。而是基于事件的。当某个事件被触发时,才获取相应的的部分数据,从而不管文件有多大,都只占用了少量的内存空间。可以读取也可以向文件中插入数据,而却只能对进行读取,而不能在文件中插入数据。 时间:2017年06月02日星期五说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:无个人学习源码:https:...

    atinosun 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<