前一个月,我接触到了Mantle,由于项目采用的是MVC的设计模式,选用好的model也是至关重要的。先介绍下Mantle的使用吧。

首先定义好数据模型:

@property (nonatomic, copy)    NSString  *address;

@property (nonatomic, copy)    NSString  *contact_info;

@property (nonatomic, copy)    NSString  *contact_name;

@property (nonatomic, assign)    NSInteger  id;

@property (nonatomic, copy)    NSString  *oppen_time;

@property (nonatomic, copy)    NSString  *project_id;

@property (nonatomic, copy)    NSString  *project_name;

@property (nonatomic, copy)    NSString  *project_situation;

@property (nonatomic, copy)    NSString  *title_name;

@property (nonatomic, copy)    NSString  *url;

然后.m文件中实现如下方法:

+(NSDictionary *)JSONKeyPathsByPropertyKey{

return @{};

}

使用

_biddingModel=[MTLJSONAdapter modelOfClass:[TTBiddingModel class] fromJSONDictionary:dic error:nil];

会什么会return呢?后面我会讲到。

参考了《为什么唱吧iOS6.0选择了Mantle》http://www.cocoachina.com/ios/20141016/9931.html

JSONKeyPathsByPropertyKey这个协议方法是将返回json中的内容序列化

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{
        @"identifier": @"id",
        @"displayDiscription": @"description",
        @"thisIsANewShit": @"newShit",
        @"creativeProduct": @"copyToChina",
        @"betterPropertyName": @"m_wired_propertyName"
    }
}
对属性名进行自动转换。
 
so为什么我会return{}呢,我们来看一看mantle的源代码
首先它定义了这样一个属性

@property (nonatomic, copy, readonly) NSDictionary *JSONKeyPathsByPropertyKey;

此时_JSONKeyPathsByPropertyKey就是我们刚刚用到的+ (NSDictionary *)JSONKeyPathsByPropertyKey {};

_JSONKeyPathsByPropertyKey = [[modelClass JSONKeyPathsByPropertyKey] copy];

init 方法里面

- (id)initWithModel:(MTLModel<MTLJSONSerializing> *)model {

NSParameterAssert(model != nil);

self = [super init];

if (self == nil) return nil;

_model = model;

_modelClass = model.class;

_JSONKeyPathsByPropertyKey = [[model.class JSONKeyPathsByPropertyKey] copy];

return self;

}

这里我cocopods的Mantle是1.5版本的,而最新的2.0.2版本舍去掉了如下方法:

- (NSString *)JSONKeyPathForPropertyKey:(NSString *)key {

NSParameterAssert(key != nil);

id JSONKeyPath = self.JSONKeyPathsByPropertyKey[key];

if ([JSONKeyPath isEqual:NSNull.null]) return nil;

if (JSONKeyPath == nil) {

return key;

} else {

return JSONKeyPath;

}

}

所以,这就是我为什么会在协议方法里return {},这里应该很明白了吧,序列化时,它会自动匹配property定义的属性。有没有很方便呢?

关于Mantle使用个人的一些见解的更多相关文章

  1. 字典转模型框架 Mantle的使用:国外程序员最常用的iOS模型

    Mantle简介 Mantle 是iOS和Mac平台下基于Objective-C编写的一个简单高效的模型层框架. Mantle能做什么 Mantle可以轻松把JSON数据.字典(Dictionary) ...

  2. [OC笔记] Category分类之见解

    用过别的语言做过开发的同学都知道,如果你想扩充一个类,就应该去继承这个类.但是OC里面有更好的方法,那就是分类. 那什么是分类呢?就是在不改变原先类,我们可以在其中添加咱们自定义的方法,这样和同事合作 ...

  3. Moqui学习之代码分析mantle priceServices.xml

    <?xml version="1.0" encoding="UTF-8"?> <!-- This software is in the pub ...

  4. "!x++" 我之见解

    "!x++"之说,各人见解不同,但真理只有一个.我只尝试着说出一种见解,未知真相. 何如? "!x++"等价于"!(x++)". 理论分析 ...

  5. iOS的Mantle实战分析

    公司项目之前的model层代码是我使用JSON工具直接生成Objective-C代码的,当时还是觉得相当省事的,毕竟我经历过无model层的NSDictionary“黑暗”时期.但是随着项目的推进,问 ...

  6. Mantle 简单教程

    Mantle可以很方便的去书写一个模型层的代码. 使用它可以很方便的去反序列化JSON或者序列化为JSON(需要在MTLModel子类中实现<MTLJSONSerializing>协议) ...

  7. 谈谈自己对于Auth2.0的见解

    Auth的原理网上有很多,我这里就不在赘述了. 这里有张时序图我个人觉得是比较合理而且直观的,(感谢这篇博文:http://justcoding.iteye.com/blog/1950270) 参照这 ...

  8. Qt见解:Post 与 Get 的区别(Get将参数直接与网址整合为一个整体,而Post则将其拆为两个部分)

    第一次接触Qt的Http项目,今天看了一下Post和Get的基本使用方法,就开始尝试了.原先以为Post专门用于向服务器发送请求,然后接收服务器应答的: 而Get只是单纯从服务器获取资源,比如下载这个 ...

  9. IT见解

    IT见解 北京海淀区  2014-10-18   张俊浩 *域名的市值在走低,因其功能被新浪.腾讯微博.微信大V这种账号所代替 *小米将自己定位为互联网公司,而不是手机公司 *手机不远的未来会成为公共 ...

随机推荐

  1. composer是什么

    composer是什么 Composer 是 PHP5.3以上 的一个依赖管理工具.它允许你声明项目所依赖的代码库,它会在你的项目中为你安装他们.Composer 不是一个包管理器.是的,它涉及 &q ...

  2. Nodemailer 报错

    { [Error: connect ECONNREFUSED] code: ‘ECONNREFUSED’, errno: ‘ECONNREFUSED’, syscall: ‘connect’ } 如果 ...

  3. SSH框架下的多表增删改查

    下载地址:SSH框架下的多表增删改查 点击进入码云Git下载 点击进入CSDN下载 项目结构: 项目代码就不全部贴出来了,只贴下核心代码.需要项目的自己可以去下载. package com.atgui ...

  4. row_number函数的使用

    转 row_number函数的使用 SQL Server数据库ROW_NUMBER()函数的使用是本文我们要介绍的内容,接下来我们就通过几个实例来一一介绍ROW_NUMBER()函数的使用. 实例如下 ...

  5. 【原创】关于java中的lock

    看了下java中高性能锁Lock,其中有如下: ReentrantLock:独占锁,类似于synchronized,不过锁的粒度更小 ReadWriteLock(ReentrantReadWriteL ...

  6. SPOJ 1029 Matrix Summation【 二维树状数组 】

    题意:二维树状数组,更改值的时候有一点不一样, 是将a[x][y]设置为一个值,所以add的时候要将它和以前的值作差一下 #include<iostream> #include<cs ...

  7. pagination使用说明

    参考自张鑫旭 准备工作 下载jquery.min.js 下载jquery.pagination.js 下载pagination.css 开始敲代码 第一步,引入刚刚下载的三个文件 <link r ...

  8. vue v-if的使用

    代码部分 <el-row> <el-col :span="20"> <template v-for="(node,i) of hierarc ...

  9. div隐藏但是依然占位置

    <!doctype html> <html> <head> <meta charset="utf-8"> <script ty ...

  10. React中的事件处理为什么要bind this?

    个人总结: 问: 请给我讲一下React中的事件处理为什么要bind this? 答: 好的,比如说我写了一个类组件,有个onClick属性 ,onClick={ this.fun },如果不bind ...