ios自动生成对象类,提高开发速率

#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==0) {

        // 写入 .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 <= 0) {

        return;

    }

    // 创建数据缓冲

    NSMutableData *writerH = [[NSMutableData alloc]init];

    NSMutableData *writerM = [[NSMutableData alloc]init];

    

    NSMutableArray *newArray = [[NSMutableArray alloc]init];    //存放每次field的数据

    

    NSDictionary *newDic = nil;

    for (int i = 0; i < data.count; i++) {

        NSDictionary *dic = [data objectAtIndex:i];

        

        if (i == 0) {

            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 - 1) {

                

                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)