将jsonModel转化为文件
将jsonModel转化为文件

这个类是我自己写着用的,用于将字典文件直接转换成Model的文件,省去你写无数Model中属性的代码:
TransformDictionary.h 与 TransformDictionary.m
//
// TransformDictionary.h
// Dic
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import <Foundation/Foundation.h> @interface TransformDictionary : NSObject + (void)withDictionary:(NSDictionary *)dictionary fileName:(NSString *)name; @end
//
// TransformDictionary.m
// Dic
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import "TransformDictionary.h" @implementation TransformDictionary + (void)withDictionary:(NSDictionary *)dictionary fileName:(NSString *)name
{
NSDictionary *dic = dictionary;
NSString *shortName = name;
NSString *fullHeadName = [name stringByAppendingString:@".h"];
NSString *fullContentName = [name stringByAppendingString:@".m"]; // .h 文件头部信息
__block NSString *headFileString = \
[NSString stringWithFormat:@"//\n// %@\n//\n// Copyright (c) 2014年 Y.X. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface %@ : NSObject\n\n\n", fullHeadName, shortName]; // .h 文件中间信息
[dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if ([key isKindOfClass:[NSString class]]) {
if ([dic[key] isKindOfClass:[NSString class]]) {
headFileString = [headFileString stringByAppendingString:[NSString stringWithFormat:@"@property (nonatomic, strong) NSString *%@;\n", key]];
} else if ([dic[key] isKindOfClass:[NSNumber class]]) {
headFileString = [headFileString stringByAppendingString:[NSString stringWithFormat:@"@property (nonatomic, strong) NSNumber *%@;\n", key]];
} else if ([dic[key] isKindOfClass:[NSDictionary class]]) {
headFileString = [headFileString stringByAppendingString:[NSString stringWithFormat:@"@property (nonatomic, strong) NSDictionary *%@;\n", key]];
} else if ([dic[key] isKindOfClass:[NSArray class]]) {
headFileString = [headFileString stringByAppendingString:[NSString stringWithFormat:@"@property (nonatomic, strong) NSArray *%@;\n", key]];
} else {
NSLog(@"%@ %@",[dic[key] class], key);
headFileString = [headFileString stringByAppendingString:[NSString stringWithFormat:@"//@property (nonatomic, strong) %@ *%@;\n", [dic[key] class], key]];
}
}
}]; // - (void)setValue:(id)value forUndefinedKey:(NSString *)key
headFileString = [headFileString stringByAppendingString:@"\n\n- (void)setValue:(id)value forUndefinedKey:(NSString *)key;\n"]; // - (instancetype)initWithDictionary:(NSDictionary *)dictionary
headFileString = [headFileString stringByAppendingString:@"- (instancetype)initWithDictionary:(NSDictionary *)dictionary;\n"]; // .h 文件尾部信息
headFileString = [headFileString stringByAppendingString:@"\n\n@end\n\n"]; // .h 文件路径
NSString *headFileStringPath = \
[NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"/Documents/%@", fullHeadName]]; // 写文件
[headFileString writeToFile:headFileStringPath
atomically:YES
encoding:NSUTF8StringEncoding
error:nil]; // ================================================================================= // // .m 文件
NSString *contentFileString = \
[NSString stringWithFormat:@"//\n// %@\n//\n// Copyright (c) 2014年 Y.X. All rights reserved.\n//\n\n#import \"%@\"\n\n@implementation %@\n\n", fullContentName, fullHeadName, shortName]; // .m 文件中间部分
// - (void)setValue:(id)value forUndefinedKey:(NSString *)key
contentFileString = [contentFileString stringByAppendingString:@"- (void)setValue:(id)value forUndefinedKey:(NSString *)key\n{\n// if([key isEqualToString:@\"id\"]) {\n// self.productID = value;\n// }\n}\n"]; // - (void)setValue:(id)value forKey:(NSString *)key
contentFileString = [contentFileString stringByAppendingString:@"\n- (void)setValue:(id)value forKey:(NSString *)key\n{\n if ([value isKindOfClass:[NSNull class]]) {\n return;\n }\n\n [super setValue:value forKey:key];\n}"]; // - (instancetype)initWithDictionary:(NSDictionary *)dictionary
contentFileString = [contentFileString stringByAppendingString:@"\n- (instancetype)initWithDictionary:(NSDictionary *)dictionary\n{\n self = [super init];\n if (self)\n {\n if ([dictionary isKindOfClass:[NSDictionary class]])\n {\n [self setValuesForKeysWithDictionary:dictionary];\n }\n }\n\n return self;\n}\n"]; // .m 文件尾部信息
contentFileString = [contentFileString stringByAppendingString:@"\n\n@end"]; // .m 文件路径
NSString *contentFileStringPath = \
[NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"/Documents/%@", fullContentName]]; [contentFileString writeToFile:contentFileStringPath
atomically:YES
encoding:NSUTF8StringEncoding
error:nil]; // 提示信息
NSLog(@"生成的文件在以下路径中 \n%@", [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"/Documents"]]);
} @end
用工具生成的Model如下:


将jsonModel转化为文件的更多相关文章
- 用 ghostscript 转化PDF文件为图片 的参数设置
example: gswin32 -dSAFER -dBATCH -dNOPAUSE -r300 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=jp ...
- .axf 转化 .bin文件 的方法
按住shift 右击按键,进入在 X:\Program Files\Keil\MDK510\ARM\ARMCC\bin . 中打开命令cmd.exe ,然后进入一下操作. 编译自己的工程,并将&quo ...
- 转载.怎样在Quartus II中转化HDL文件为bsf文件?
步骤1 新建或打开Quartus II工程,用QII自带文本编辑器打开HDL文件. 图1 用QII自带的文本编辑器打开HDL文件 步骤2 选择File>Create / Update>Cr ...
- dos2unix 批量转化文件
在windows和linux双平台下开发,同时也用git作为同步工具,但前期没有注意,导致很多文件使用windows下的换行符CRLF 参考资料了解dos2unix可以转化格式. 但有个问题,虽然可以 ...
- C# 其他的Url 文件的路径转化为二进制流
//将虚拟路径转化为文件的路径然后最后转化为文件流 public ActionResult SaveImage(string path) { var url =System.Web.HttpConte ...
- Win10系统下安装labelme,json文件批量转化
一.安装环境:windows10,anaconda3,python3.6 由于框架maskrcnn需要json数据集,在没安装labelme环境和跑深度学习之前,我安装的是anacon ...
- C# 给PDF文件添加水印
水印种类及功能介绍 PDF水印分为两种:文本水印和图片水印.文本水印一般被用在商业领域,提醒读者该文档是受版权保护的,其他人不能抄袭或者免费使用.除了这个特征,水印还可以用来标记这个文档 的一些基 ...
- Excel文件转plist文件出现的文件编码问题
今天在测试时遇到了需要将大量整理好的Excel数据转换为plist文件的情况.百度了一下教程,发现虽然别人也遇到过类似的情况,但是有些讲的还是不够细致.所以做如下整理. 百度到的内容中有使用Mes ...
- python基础之文件处理
读和写文件 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直 ...
随机推荐
- SpringMVC源码阅读:异常解析器
1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...
- PHP 类与对象 全解析(三)
目录 PHP 类与对象 全解析( 一) PHP 类与对象 全解析( 二) PHP 类与对象 全解析(三 ) 13.魔术方法 定义:PHP把所有以__(两个下划线)开头的类方法当成魔术方法 __ ...
- SSH框架搭建步骤总结以及Hibernate二级缓存,查询缓存
二级缓存.查询缓存 一级缓存: 默认启动,生命周期是和session同步的,session独享 二级缓存: 需要加载配置信息,生命周期是和应用服务器同步,session共享 1:在hibernate. ...
- .net core 2.2 部署CentOS7(3)安装Xshell操控CentOS7
目录: .net core 2.2 部署CentOS7(1)安装虚拟机 .net core 2.2 部署CentOS7(2)给虚拟机安装CentOS7 .net core 2.2 部署CentOS7( ...
- Service生命周期以及应用
Service概念及用途: Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行 ...
- SpringCloud Eureka(注册中心集群)
多个注册中心,其实用不同的配置对应 不同的端口号注册就行了. 注册中心自己也是个服务,看看之前的单个注册中心是怎么样的呢? server: port: 8888 # 服务端口eureka: insta ...
- Redis与Memcached简单对比(转)
很多开发者都认为Redis不可能比Memcached快,Memcached完全基于内存,而Redis具有持久化保存特性,即使是异步的,Redis也不可能比Memcached快.但是测试结果基本是Red ...
- VS2013平台安装Qt插件过程
1.下载所需安装包: Qt5.3.Qt插件下载地址:http://qt-project.org/downloads. qt-vs-addin-1.1.11-opensource.exe 下载地址:ht ...
- 在MyBatis中查询数据、涉及多参数的数据访问操作、插入数据时获取数据自增长的id、关联表查询操作、动态SQL、关于配置MyBatis映射没有代码提示的解决方案
1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后, ...
- 转:php中判断某个IP地址是否存在范围内
原文:php中判断某个IP地址是否存在范围内 //案例:判断192.168.1.127是否在 (192.168.1.1--192.168.1.255)的范围里面 $ip_start = get_ipl ...