关于Mantle使用个人的一些见解
前一个月,我接触到了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" }}@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使用个人的一些见解的更多相关文章
- 字典转模型框架 Mantle的使用:国外程序员最常用的iOS模型
Mantle简介 Mantle 是iOS和Mac平台下基于Objective-C编写的一个简单高效的模型层框架. Mantle能做什么 Mantle可以轻松把JSON数据.字典(Dictionary) ...
- [OC笔记] Category分类之见解
用过别的语言做过开发的同学都知道,如果你想扩充一个类,就应该去继承这个类.但是OC里面有更好的方法,那就是分类. 那什么是分类呢?就是在不改变原先类,我们可以在其中添加咱们自定义的方法,这样和同事合作 ...
- Moqui学习之代码分析mantle priceServices.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- This software is in the pub ...
- "!x++" 我之见解
"!x++"之说,各人见解不同,但真理只有一个.我只尝试着说出一种见解,未知真相. 何如? "!x++"等价于"!(x++)". 理论分析 ...
- iOS的Mantle实战分析
公司项目之前的model层代码是我使用JSON工具直接生成Objective-C代码的,当时还是觉得相当省事的,毕竟我经历过无model层的NSDictionary“黑暗”时期.但是随着项目的推进,问 ...
- Mantle 简单教程
Mantle可以很方便的去书写一个模型层的代码. 使用它可以很方便的去反序列化JSON或者序列化为JSON(需要在MTLModel子类中实现<MTLJSONSerializing>协议) ...
- 谈谈自己对于Auth2.0的见解
Auth的原理网上有很多,我这里就不在赘述了. 这里有张时序图我个人觉得是比较合理而且直观的,(感谢这篇博文:http://justcoding.iteye.com/blog/1950270) 参照这 ...
- Qt见解:Post 与 Get 的区别(Get将参数直接与网址整合为一个整体,而Post则将其拆为两个部分)
第一次接触Qt的Http项目,今天看了一下Post和Get的基本使用方法,就开始尝试了.原先以为Post专门用于向服务器发送请求,然后接收服务器应答的: 而Get只是单纯从服务器获取资源,比如下载这个 ...
- IT见解
IT见解 北京海淀区 2014-10-18 张俊浩 *域名的市值在走低,因其功能被新浪.腾讯微博.微信大V这种账号所代替 *小米将自己定位为互联网公司,而不是手机公司 *手机不远的未来会成为公共 ...
随机推荐
- 模拟实现Spring IoC功能
为了加深理解Spring 今天自己写了一个模拟的Spring.... 步骤: 1.利用jdom解析bean.xml(pull,sax也能够,我这里用了jdom) 2.先解析全部的<bean/&g ...
- Gradle 编译多个project(包括多Library库project依赖)指导
Gradle Android最新自己主动化编译脚本教程(提供demo源代码) 这篇文章我简单写了基于Gradle2.1 进行的android project和android library的编译实例, ...
- transient修饰符的作用
transient修饰符的作用: entity实体类: package com.baidu.entity; import com.fasterxml.jackson.annotation.JsonIg ...
- rem 、em
介绍:rem是相对字体单位:根据html根元素大小而定,同样可作为宽高等单位: 适配原理:将px替换成rem,采用rem适配移动web的原理,根据不同屏幕宽度设置html的font-size的大小: ...
- 51nod 1562 玻璃切割 (STL map+一点点的思考)
1562 玻璃切割 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 现在有一块玻璃,是长方形的(w 毫米× h 毫米),现在要 ...
- win10关闭更新
计算机--管理: 找到windows update 服务关闭:
- c++string类的简单介绍
#include "iostream" #include "string" using namespace std; /*@author:浅滩 *family: ...
- 路飞学城Python-Day14(practise)
本章总结 练习题 1.logging模块有几个日志级别? 5个,按级别从高到低分别是 CRITICAL(灾难)>ERROR(错误)>WARNING(警示)>INFO(信息)>D ...
- css 禁止文本被选中复制代码
css 禁止文本被选中复制代码: .cus-text{ -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none ...
- OpenResty.spec
Name: openresty Version: 1.13.6.1 Release: 2%{?dist} Summary: OpenResty, scalable web platform by ex ...