接着上次的讲,这次我们讲 网络请求的封装  打开创建的项目,让我们一起来继续完成他,

首先我们来创建一个NSobject 的文件

圈住出来的轻一点要注意。千万不要搞错了

创建好之后,开始编写代码,

我们第一不要要先把工程文件引用进来

看图

让后我们定义一下接口  和 一个block

//block定义
typedef void(^RequestFinishBlock)(id result);
 @interface ZWJDataService : NSObject

 //定义接口
+(ASIHTTPRequest *)requestWithURL:(NSString *)urlstring
params:(NSMutableDictionary *)params
httpMethod:(NSString *)httpMethod
completeBlock:(RequestFinishBlock)block; @end

上图片

打开.m文件

补充说明一下 由于我们这里网络数据是用json格式的所以要解析json还要引用第三方的库,

JSONKit

先导入 JSONkit.h JSONKit.m 两个文件

cocoa 下json开源的类库有很多,其中JSONKit库是非常简单易用而且效率又比较高的。

想要使用JSONKit库来解析json文件,只需要下载JSONKit.h 和JSONKit.m添加到工程中(下载链接);然后加入libz.dylib即可

在扩展一下 讲一下使用方法

1.将json转换为NSDictionary

NSString *string = @"{\"name\": \"My Name\",\"list\": [\"one\",\"two\",\"three\"]}";  

NSData* jsonData = [string dataUsingEncoding:NSUTF8StringEncoding];  

NSDictionary *resultsDictionary = [jsonData objectFromJSONData]; 

2.将NSDictionary转换为 json格式的string

//resultsDic是需要转换的Dictionary
NSString *string = [[NSString alloc] initWithData:[resultsDic JSONData] encoding:NSUTF8StringEncoding];

下面继续回归主题

实现.h文件当中定义的接口

+(ASIHTTPRequest *)requestWithURL:(NSString *)urlstring
params:(NSMutableDictionary *)params
httpMethod:(NSString *)httpMethod
completeBlock:(RequestFinishBlock)block{ }

这个方法的参数我不做注释我想大家根据单词的意思也能大概了解到。之前英语没学好,现在边学习编程还要辅助学习English。。。

下边我们还要做一件定义一个宏基地址

意思就是说我们要访问接口肯定要用到url,那么url里边肯定会有主机地址跟接口的主入口是不变的,边的东西需要我们动态的去加载、变更。

#define BASE_URL @"http://**********/api/"

在这里我的测试地址就不做显示了,大家也可以根据自己的不同的需求来定义自己的接口主体

我这里的url是分为

主体部分 + token + 其他参数 组合而成的

其他参数:我们在接口中已经定义过了他是 NSMutableDictionary  类型的 ,在C#里边是Dictionary键值对字典

params:(NSMutableDictionary *)params

在这里我们必须得遵守oc中的守则才进行参数的命名定义;

拼接URL字符串

//拼接URL字符串
urlstring=[BASE_URL stringByAppendingFormat:@"%@?access_token=aa",urlstring]; NSLog(@"urlStr : %@ ",urlstring);

拼接完成以后,我们为了验证是否正确在打印一下,看一下输出的跟我们接口要的链接是否一致相对应;

接下来,我们要判断请求方式 是GET  还是 POST

我们这里用的是caseInsensitiveCompare ,所以在这里只讲一下caseInsensitiveCompare

NSString *astring01 = @"GET";  
NSString *astring02 = @"get";      
BOOL result = [astring01 compare:astring02] = = NSOrderedSame;      
NSLog(@"result:%d",result);      
//NSOrderedSame判断两者内容是否相同  忽略大小写

下边就该进行GET请求字符串的拼接了;

//处理GET请求的参数
NSComparisonResult comparRet1=[httpMethod caseInsensitiveCompare:@"GET"];
if(comparRet1==NSOrderedSame){
NSMutableString *paramsString=[NSMutableString string];
NSArray *allkeys=[params allKeys];
NSLog(@"parms : %@ \r\n",params);
for (int i=; i<params.count; i++) {
NSString *key=[allkeys objectAtIndex:i];
id value=[params objectForKey:key]; [paramsString appendFormat:@"%@=%@",key,value]; if (i<params.count-) {
[paramsString appendFormat:@"&"];
}
NSLog(@"paramsString : %@ ",paramsString); } if (paramsString.length>) {
urlstring=[urlstring stringByAppendingFormat:@"&%@",paramsString];
}
}
NSURL *url=[NSURL URLWithString:urlstring]; NSLog(@"URL : %@ ",url);

完成以后在打印一下 检查一下字符串是否正确

今天先讲到这里,该睡觉了,谢谢大家对我的支持,关注!

如果觉得有用的话,别忘了推荐一下哦,共同学习,共同进步!

作者:zhangwenjian
出处:http://www.cnblogs.com/zhangwenjian
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

移动开发在路上-- IOS移动开发系列 网络交互四(2)的更多相关文章

  1. 移动开发在路上-- IOS移动开发系列 多线程二

    最近太忙没太多的时间,忙碌的码农生活空下来一点时间,都会挤出来看一些技术或者咨询的文章,废话不多说,直奔主题. 接着上一次的继续说. 定时器在多线程的使用 NSRunLoop 是线程相关的基础框架的一 ...

  2. 移动开发在路上-- IOS移动开发系列 网络交互四(1)

    最近一段时间上班忙的没日没夜的,不是披星戴月,就是头天早上出门,第二天早上回家...一直没出处时间来更新博客,码农之苦,说了都是泪,废话不多说,直接本主题,经过之前三篇的讲述,ios开发的东西大家或多 ...

  3. 移动开发在路上-- IOS移动开发系列 多线程三

    这一次说一点概念性的东西,也是为后边做一些基础 HTTP协议的基本概念 http协议的基本概念 全称“超文本传输协议”,浏览器和服务器之间的通信规则 HTTp协议永远都是客户端发起的请求,服务器回送响 ...

  4. 移动开发在路上-- IOS移动开发系列 多线程一

    类似于什么是进程什么是线程在这里我就不多浪费时间了(Google一下什么都有)! 废话不多说先上图,我相信大家都是喜欢看图的人,俗话说得好,求图求真相吗?虽然这里只有屌丝一个但是真相还是会有的... ...

  5. 移动开发在路上-- IOS移动开发 五 网络请求封装

    接着上次的讲,这次我们讲 网络请求的封装  打开创建的项目,让我们一起来继续完成他, 上次我们说到GET请求地址的拼接: 我们接着上次的继续完善: 下边我们要定义的是 block //定义block ...

  6. iOS APP开发的小知识(分享)

          亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...

  7. iOS企业级开发初级课程-表视图(13集)

    首先了解了表视图的组成.表视图类的构成.表视图的分类以及表视图的两个重要协议(委托协议和数据源协议),对表视图有了一个整体上的认识.接下来我们掌握了如何实现简单表视图和分节表视图,以及表视图中索引.搜 ...

  8. ios framework 开发

    ios framework 开发 之 参考 ios framework 开发 之 实战 iOS workspace 依次编译多个工程

  9. iOS开发系列--网络开发

    概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...

随机推荐

  1. mysql General error: 1366 Incorrect string value: '\xF0\x9F\x91\x8D\xF0\x9F...' for column 'dianpumiaoshu' at row 1 解决方法

    mysql General error: 1366 Incorrect string value: '\xF0\x9F\x91\x8D\xF0\x9F...' for column 'dianpumi ...

  2. 全栈项目|小书架|服务器开发-JWT 详解

    JWT 官方简介:Introduction to JSON Web Tokens 文章基本是官网内容的翻译,英文不错的同学可点击上面的链接直接看英文文档. 什么是 JWT JWT全称是JSON Web ...

  3. ASP.NET Core 1.0: API的输入参数

    Web API是需要接受参数的,譬如,通常用于创建数据的POST method需要接受输入数据,而用于GET method也需要接受一些可选参数,譬如:为了性能起见,控制返回数据的数量是至关重要的. ...

  4. .NET Core3.0 EF 连接 MySql

    一:创建项目 添加 csproj (或者直接NuGet 引用) <ItemGroup> <PackageReference Include="Microsoft.Entit ...

  5. yum 配置文件 以及 语法

    yum的配置文件 #vi /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever keepcache= debugleve ...

  6. 领扣(LeetCode)3的幂 个人题解

    给定一个整数,写一个函数来判断它是否是 3 的幂次方. 示例 1: 输入: 27 输出: true 示例 2: 输入: 0 输出: false 示例 3: 输入: 9 输出: true 示例 4: 输 ...

  7. jinjia2

    ansible-playbook --become --become-method=su -K copy.yml - hosts: web remote_user: ansible tasks: - ...

  8. 物联网架构成长之路(47)-利用GitLab实现CI持续集成

    0.前言 前段时间,考虑到要练习部署一套CI/CD的系统.一开始考虑到Jenkins,随着这两天的了解,发现最新版的GitLab已经提供有CI/CD集成了.所以本次博客,干脆一步到位,直接用GitLa ...

  9. Java面向对象学习目录

    Java面向对象学习目录 以下为面向对象学习目录,有待补充的部分,我还会再后续的学习过程中加以补充与修改~ 一.面向对象编程思想 二.Java类及类中成员 属性 方法 构造器 代码块 内部类 面向对象 ...

  10. 2019-11-28:ssrf基础学习,笔记

    ssrf服务端请求伪造ssrf是一种由恶意访问者构造形成由服务端发起请求的一个安全漏洞,一般情况下,ssrf访问的目标是从外网无法访问的内部系统,正式因为它是由服务端发起的,所以它能请求到它相连而外网 ...