浅谈使用RestKit将服务器的Json直接映射为本地对象
来源:互联网 发布:mac os 10.10升级10.11 编辑:程序博客网 时间:2024/04/29 01:37
RestKit是一个主要用于iOS上网络通信的开源框架,除了发送请求与接受响应这些基本功能外,还附带coredata,以及将远程JSON映射为本地对象的功能。目前版本0.9.3,coredata还不是很稳定,他的coredata的demo页面在4.3.3实机下直接导致程序crash,但是其JSON映射为本地对象的功能是十分强大的。
首先,RestKit要求我们在客户端定义一个Model类,用于存储数据和处理业务逻辑。远程JSON中各键将直接映射为Model中各成员变量。对应每一个模型都要定义一个对应的Model类,这是强制的。
强制定义模型带来的好处是我们只需要写一次字典中的key,不再会因为字典的key拼错导致程序crash了。
RestKit使用起来省时省力,但是思维方式和ASIHTTP差异不小,以下举一例说明。
1、
假设服务器上的JSON数据如下:
我们用来存储此JSON的对象的类名为SimpleAccount,其中包含六个成员:
_accountID用来对应JSON的id;
_name对应JSON的name;
_balance对应JSON的balance;
_transactionCount对应JSON的transactions数组中元素的数量;
_averageTransactionAmount对应JSON里transactions各元素的amount值的平均数;
_distinctPayees是将JSON里transactions中各元素的payee的值取出来后拼接而成的数组。
首先在Model的.h里定义好我们的数据成员,在.m里写好synthesize:
2、
在恰当的时机(比如viewDidAppear中)做JSON键到Model成员变量的映射,然后开始请求数据。
@”id”,@”accountID”,把本Model中的accountID属性映射为JSON的id键对应的值;name和balance属性同理。
@”transactions.@count”,@transactionsCount”,取JSON中transactions数组的元素数。
@”transactions.@avg.amount”,@averageTransactionAmount”,取JSON中transactions的各元素的amount的值的平均数。
@”transactions.@distinctUnionOfObjects.payee”,@”distinctPayees”,将JSON里transactions中各元素的payee的值取出来后拼接而成的数组。
@”transactions.@avg.amount”这种写法比较诡异,可以理解成调用transactions对象的avg方法,传入参数是amount。
代码如下
3、
定义好映射之后,就可以开始向服务器请求数据了。
[RKObjectManager sharedManager]返回一个单件的RKObjectManager。在初始化时向里面存入服务器的URL;
loadObjectResourcePath指定需要请求的JSON数据在服务器中的相对路径(服务器地址已经储存在RKObjectManage里,所以无需在此指定);
objectClass指定映射成的对象的类;
delegate指定接受回调的对象,在请求完成时,此对象的- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects会被调用。
4、
最后是回调方法,若收到的JSON根为数组,则返回数组。根不是数组,则返回一个count为1的数组,所以回调收到的objects是NSArray*类型的。
参考资料http://mobile.tutsplus.com/tutorials/iphone/advanced-restkit-development_iphone-sdk/
以上
–OpenThread
- 浅谈使用RestKit将服务器的Json直接映射为本地对象
- 将json数据映射到本地数据模型对象的一点想法
- 使用Struts 2将客户端JSON数据映射为服务器端Java对象
- 使用Struts 2将客户端JSON数据映射为服务器端Java对象
- RESTKit的使用教程
- RESTKit的使用教程
- 对象转换为json串的类,没有引用其他的jar包,可以直接使用
- 使用evel()函数将json字符串转换为json对象
- 通过Gson将服务器返回的JSON对象转换为POJO类
- 使用 jackson ObjectMapper将java对象转换为json对象
- java使用反射将json对象转换为java对象
- 如何将本地磁盘映射到服务器
- Centos7部署ntp服务器同步时间以及直接将本地时间同步为北京时间
- 将FTP映射为本地磁盘
- 将ajax返回的json数据转化为json对象
- 将每行映射为MAP对象的RowMapper实现
- 使用Gson将Java对象转换为Json
- 使用Gson将Java对象转换为JSON
- Struts2 校验器进一步解释(2)
- UML 类与类之间的关系
- 我愿化成一座做石桥
- 多条件数据库查询的优化方法
- gcc gdb初学者
- 浅谈使用RestKit将服务器的Json直接映射为本地对象
- 为啥苹果电视“火”不起来?
- C语言中scanf()函数对总结:
- printf()用法
- Android在模拟器中安装软件
- C 语言文件操作
- TextView属性大全
- Android 4.4 KitKat中SecretKeyFactory API的变动
- android一点点基础