#import "autoGenerationFileUtility.h"

@implementation autoGenerationFileUtility

- (void)createFile:(NSString *)filename DataSource:(NSMutableArray *)arr
{
_ClassName = [filename retain];
NSMutableArray *tempArr = [arr retain]; // 创建文件管理器
NSFileManager *fileManager = [NSFileManager defaultManager]; // // 获取docoument路经,括号中属性为当前应用程序独享
// NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//
// // 去处需要的路径
// NSString *documentDirectory = [directoryPaths objectAtIndex:0]; NSString* documentDirectory = @"具体路径,文件生成路径"; // 创建.h文件路经
NSString *pathH = [self createFilePath:[NSString stringWithFormat:@"%@.h",_ClassName] PathDocument:documentDirectory FileManager:fileManager];
// 创建.m文件路经
NSString *pathM = [self createFilePath:[NSString stringWithFormat:@"%@.m",_ClassName] PathDocument:documentDirectory FileManager:fileManager]; // NSString * pathH_Content = [[NSString alloc] initWithContentsOfFile:pathH];
NSData *pathH_Content = [[[NSData alloc] initWithContentsOfFile:pathH] autorelease];
if (pathH_Content.length==) {
// 写入 .h 文件数据
[self H_populateTheDataSource:tempArr FilePathH:pathH FilePathM:pathM];
} [tempArr release];
} // 创建文件、如果文件名存在,则先删除已存在的文件,再创建新文件
- (NSString *)createFilePath:(NSString *)filename PathDocument:(NSString *)documentDirectory FileManager:(NSFileManager *)fileManager
{
NSString *filePath = [documentDirectory stringByAppendingPathComponent:filename]; // [fileManager removeItemAtPath:filePath error:nil]; if (![fileManager fileExistsAtPath:filePath]) {
[fileManager createFileAtPath:filePath contents:nil attributes:nil];
} return filePath;
} - (void)H_populateTheDataSource:(NSMutableArray *)data FilePathH:(NSString *)path_h FilePathM:(NSString *)path_m
{
if (data.count <= ) {
return;
}
// 创建数据缓冲
NSMutableData *writerH = [[NSMutableData alloc]init];
NSMutableData *writerM = [[NSMutableData alloc]init]; NSMutableArray *newArray = [[NSMutableArray alloc]init]; //存放每次field的数据 NSDictionary *newDic = nil;
for (int i = ; i < data.count; i++) {
NSDictionary *dic = [data objectAtIndex:i]; if (i == ) {
newDic = dic;
[writerH appendData:[[self H_addHeaderFileString] dataUsingEncoding:NSUTF8StringEncoding]];
[writerH appendData:[[self H_addClassNameString:[dic objectForKey:@"classname"]] dataUsingEncoding:NSUTF8StringEncoding]];
[writerH appendData:[[self H_addLeftKuoHao] dataUsingEncoding:NSUTF8StringEncoding]]; NSString *tempStr = [self H_addField:[dic objectForKey:@"fieldname"] ClassType:[dic objectForKey:@"type"]];
[writerH appendData:[tempStr dataUsingEncoding:NSUTF8StringEncoding]]; [writerM appendData:[[self M_addHeaderFileString:_ClassName] dataUsingEncoding:NSUTF8StringEncoding]];
[writerM appendData:[[self M_addClassNameString:[dic objectForKey:@"classname"]] dataUsingEncoding:NSUTF8StringEncoding]]; [writerM appendData:[[self M_addSynthesizeName:[dic objectForKey:@"fieldname"]] dataUsingEncoding:NSUTF8StringEncoding]]; [newArray addObject:dic];
}
else{
if (i == data.count - ) { NSString *tempStr = [self H_addField:[dic objectForKey:@"fieldname"] ClassType:[dic objectForKey:@"type"]];
[writerH appendData:[tempStr dataUsingEncoding:NSUTF8StringEncoding]];
[writerH appendData:[[self H_addRightKuoHao] dataUsingEncoding:NSUTF8StringEncoding]]; [writerM appendData:[[self M_addSynthesizeName:[dic objectForKey:@"fieldname"]] dataUsingEncoding:NSUTF8StringEncoding]]; [newArray addObject:dic]; for (NSDictionary *_dic in newArray) { NSString *tempStr = [self H_addProperty:[_dic objectForKey:@"fieldname"] ClassType:[_dic objectForKey:@"type"]];
[writerH appendData:[tempStr dataUsingEncoding:NSUTF8StringEncoding]]; Class retClass = NSClassFromString([_dic objectForKey:@"type"]);
if ([[NSString stringWithFormat:@"%@",[retClass class]] isEqualToString:@"NSMutableArray"]){ [writerM appendData:[[self M_addATArray:[_dic objectForKey:@"fieldname"] ClassName:
[NSString stringWithFormat:@"Buy_%@",[_dic objectForKey:@"fieldname"]]] dataUsingEncoding:NSUTF8StringEncoding]];
}
} [writerH appendData:[[self addEnd] dataUsingEncoding:NSUTF8StringEncoding]]; [writerM appendData:[[self M_addDealloc1] dataUsingEncoding:NSUTF8StringEncoding]];
for (NSDictionary *_dic in newArray) {
Class retClass = NSClassFromString([_dic objectForKey:@"type"]);
if (retClass) {
[writerM appendData:[[self M_addRelProperty:[_dic objectForKey:@"fieldname"]] dataUsingEncoding:NSUTF8StringEncoding]];
}
} [writerM appendData:[[self M_addDealloc2] dataUsingEncoding:NSUTF8StringEncoding]]; [newArray removeAllObjects];
}
else{ if ([[dic objectForKey:@"index"] isEqualToString:[newDic objectForKey:@"index"]] &&
[[dic objectForKey:@"classname"] isEqualToString:[newDic objectForKey:@"classname"]]) {
NSString *tempStr = [self H_addField:[dic objectForKey:@"fieldname"] ClassType:[dic objectForKey:@"type"]];
[writerH appendData:[tempStr dataUsingEncoding:NSUTF8StringEncoding]]; [writerM appendData:[[self M_addSynthesizeName:[dic objectForKey:@"fieldname"]] dataUsingEncoding:NSUTF8StringEncoding]]; [newArray addObject:dic];
}
else{
newDic = dic; [writerH appendData:[[self H_addRightKuoHao] dataUsingEncoding:NSUTF8StringEncoding]]; for (NSDictionary *_dic in newArray) { NSString *tempStr = [self H_addProperty:[_dic objectForKey:@"fieldname"] ClassType:[_dic objectForKey:@"type"]];
[writerH appendData:[tempStr dataUsingEncoding:NSUTF8StringEncoding]]; Class retClass = NSClassFromString([_dic objectForKey:@"type"]);
if ([[NSString stringWithFormat:@"%@",[retClass class]] isEqualToString:@"NSMutableArray"]){
[writerM appendData:[[self M_addATArray:[_dic objectForKey:@"fieldname"] ClassName:[NSString stringWithFormat:@"Buy_%@",[_dic objectForKey:@"fieldname"]]] dataUsingEncoding:NSUTF8StringEncoding]];
}
} [writerH appendData:[[self addEnd] dataUsingEncoding:NSUTF8StringEncoding]]; [writerM appendData:[[self M_addDealloc1] dataUsingEncoding:NSUTF8StringEncoding]];
for (NSDictionary *_dic in newArray) {
Class retClass = NSClassFromString([_dic objectForKey:@"type"]);
if (retClass) {
[writerM appendData:[[self M_addRelProperty:[_dic objectForKey:@"fieldname"]] dataUsingEncoding:NSUTF8StringEncoding]];
}
}
[writerM appendData:[[self M_addDealloc2] dataUsingEncoding:NSUTF8StringEncoding]]; [newArray removeAllObjects]; [writerH appendData:[[self H_addClassNameString:[newDic objectForKey:@"classname"]] dataUsingEncoding:NSUTF8StringEncoding]];
[writerH appendData:[[self H_addLeftKuoHao] dataUsingEncoding:NSUTF8StringEncoding]]; NSString *tempStr = [self H_addField:[dic objectForKey:@"fieldname"] ClassType:[dic objectForKey:@"type"]];
[writerH appendData:[tempStr dataUsingEncoding:NSUTF8StringEncoding]]; [writerM appendData:[[self M_addClassNameString:[newDic objectForKey:@"classname"]] dataUsingEncoding:NSUTF8StringEncoding]]; [writerM appendData:[[self M_addSynthesizeName:[dic objectForKey:@"fieldname"]] dataUsingEncoding:NSUTF8StringEncoding]]; [newArray addObject:dic]; }
}
}
} [writerH writeToFile:path_h atomically:YES];
[writerM writeToFile:path_m atomically:YES];
[writerH release];
[writerM release];
[newArray release]; } #pragma mark -
#pragma mark - 写入 .h 文件的相关函数 // 返回头文件
- (NSString *)H_addHeaderFileString
{
return @"#import <Foundation/Foundation.h> \n \n \n";
} // 返回类名
- (NSString *)H_addClassNameString:(NSString *)className;
{
return [NSString stringWithFormat:@"@interface %@ : NSObject \n",className];
} // 返回左括号
- (NSString *)H_addLeftKuoHao
{
return @"{ \n";
} // 返回右括号
- (NSString *)H_addRightKuoHao
{
return @"} \n \n";
} // 返回字段
- (NSString *)H_addField:(NSString *)field ClassType:(NSString *)type
{
Class retClass = NSClassFromString(type);
if (retClass)
return [NSString stringWithFormat:@" %@ *%@; \n",type,field];
else
return [NSString stringWithFormat:@" %@ %@; \n",type,field];
} // 返回属性
- (NSString *)H_addProperty:(NSString *)property ClassType:(NSString *)type
{
Class retClass = NSClassFromString(type);
if (retClass) {
return [NSString stringWithFormat:@"@property (nonatomic,retain) %@ *%@; \n",type,property];
}
else
return [NSString stringWithFormat:@"@property %@ %@; \n",type,property];
} #pragma mark -
#pragma mark - 写入 .m 文件的相关函数 // 返回头文件
- (NSString *)M_addHeaderFileString:(NSString *)classname
{
return [NSString stringWithFormat:@"#import \"%@.h\"\n #import \"NSDictionary+JSON.h\" \n \n",classname];
} // 返回类名
- (NSString *)M_addClassNameString:(NSString *)className;
{
return [NSString stringWithFormat:@"@implementation %@ \n",className];
} // 返回@synthesize
- (NSString *)M_addSynthesizeName:(NSString *)property
{
return [NSString stringWithFormat:@"@synthesize %@; \n",property];
} - (NSString *)M_addATArray:(NSString *)property ClassName:(NSString *)classname
{
NSString *retString = [NSString stringWithFormat:@"- (NSMutableArray *)%@ \n{\n",property];
retString = [NSString stringWithFormat:@"%@ for (int i = 0; i < %@.count; i++) {\n",retString,property];
retString = [NSString stringWithFormat:@"%@ if([[%@ objectAtIndex:i] class] != [%@ class]) {\n",retString,property,classname];
retString = [NSString stringWithFormat:@"%@ NSDictionary * _dic = (NSDictionary *)[%@ objectAtIndex:i];\n",retString,property];
retString = [NSString stringWithFormat:@"%@ [%@ replaceObjectAtIndex:i withObject:[_dic dictionaryTo:NSClassFromString(@\"%@\")]];\n } \n",retString,property,classname];
retString = [NSString stringWithFormat:@"%@ }\n",retString];
retString = [NSString stringWithFormat:@"%@ return %@;\n}\n \n",retString,property]; return retString;
} // 返回释放属性
- (NSString *)M_addRelProperty:(NSString *)property
{
return [NSString stringWithFormat:@" [%@ release];\n",property];
} - (NSString *)M_addDealloc1
{
return @"\n \n-(void)dealloc \n{";
} - (NSString *)M_addDealloc2
{
return @" [super dealloc]; \n} \n@end \n\n";
} // 返回结束符
- (NSString *)addEnd
{
return @"\n @end \n \n";
} - (void)dealloc
{
[_ClassName release]; [super dealloc];
} @end

ios自动生成对象类,提高开发速率的更多相关文章

  1. 【原创】有关Silverlight中自动生成的类中 没有WCF层edmx模型新加入的对象 原因分析。

      前端页面层:    编译老是不通过,报如下如所示错误:     -- 然后下意识的查了下 生成的cs文件,没有搜到根据edmx 生成的 对应的类.       结果整理: 1.尽管在 edmx 模 ...

  2. Springboot mybatis generate 自动生成实体类和Mapper

    https://github.com/JasmineQian/SpringDemo_2019/tree/master/mybatis Springboot让java开发变得方便,Springboot中 ...

  3. Mybatis自动生成实体类

    Maven自动生成实体类需要的jar包 一.pom.xml中 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns ...

  4. .NET SourceGenerators 根据 HTTPAPI 接口自动生成实现类

    目录 摘要 元数据分析 使用 Source generators 实现 使用 Source generators 实现程序集分析 使用方法 SourceCode && Nuget pa ...

  5. 使用T4为数据库自动生成实体类

    T4 (Text Template Transformation Toolkit) 是一个基于模板的代码生成器.使用T4你可以通过写一些ASP.NET-like模板,来生成C#, T-SQL, XML ...

  6. ANTLR和StringTemplate实例:自动生成单元测试类

    ANTLR和StringTemplate实例:自动生成单元测试类 1. ANTLR语法 要想自动生成单元测试,首先第一步就是分析被测试类.这里以Java代码为例,用ANTLR对Java代码进行分析.要 ...

  7. Mybatis自动生成实体类、dao接口和mapping映射文件

    由于Mybatis是一种半自动的ORM框架,它的工作主要是配置mapping映射文件,为了减少手动书写映射文件,可以利用mybatis生成器,自动生成实体类.dao接口以及它的映射文件,然后直接拷贝到 ...

  8. mybatis怎样自动生成java类,配置文件?

    其实没有什么东西是可以自动生成的,只不过是别人已经写好了,你调用罢了. 所以想要mybatis自动生成java类,配置文件等,就必须要一些配置和一些jar包.当然这些配置也很简单. 为了有个初步的认识 ...

  9. .net core 中简单封装Dapper.Extensions 并使用sqlsuger自动生成实体类

    引言 由公司需要使用dapper  同时支持多数据库 又需要支持实体类 又需要支持sql 还需要支持事务 所以采用了 dapper + dapperExtensions  并配套 生成实体类小工具的方 ...

随机推荐

  1. Windows 通过 SecureCRT 8.x 上传文件到Linux服务器

    1.SecureCRT 连接 Linux 服务器,这一步操作简单: 2.连接并登录成功后,直接在连接成功的页签上 右键 ->  Connect SFTP Session 打开SFTP窗口: 3. ...

  2. 九度oj 题目1048:判断三角形类型

    题目描述: 给定三角形的三条边,a,b,c.判断该三角形类型. 输入: 测试数据有多组,每组输入三角形的三条边. 输出: 对于每组输入,输出直角三角形.锐角三角形.或是钝角三角形. 样例输入: 3 4 ...

  3. HackerRank# Red John is Back

    原题地址 简单动归+素数判定,没用筛法也能过 代码: #include <cmath> #include <cstdio> #include <vector> #i ...

  4. BZOJ4446 [Scoi2015]小凸玩密室 【树形Dp】

    题目 小凸和小方相约玩密室逃脱,这个密室是一棵有n个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯 泡即可逃出密室.每个灯泡有个权值Ai,每条边也有个权值bi.点亮第1个灯泡不需要花费,之后每点亮4 ...

  5. 算法复习——半平面交(bzoj2618凸多边形)

    讲解: 这里套用wuvin神犇的ppt,附上友情链接:http://blog.leanote.com/wuvin 半平面交: 算法流程: 注意事项: 例题: Description 逆时针给出n个凸多 ...

  6. eclipse 搭建ruby环境

    第一步:获取RDT,http://sourceforge.net/projects/rubyeclipse/files/ 解压该文件,获得features和plugins两个文件夹,将这两个文件夹分别 ...

  7. POJ3132 Sum of Different Primes

    Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3473   Accepted: 2154 Description A pos ...

  8. 1109 NOIP 模拟考试

    NOIP2016 模拟赛 ——那些年,我们学过的文化课 背单词(word.c/cpp/pas)[题目描述]fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单词. 看着满篇的单词非常头疼, ...

  9. cef network-settings

    Network Settings 目录 1 System network settings 2 Preference service for network settings 3 Command-li ...

  10. ExtNet配置webconfig

    <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细信息,请访 ...