归档和反归档的封装

2016-06-14  本文已影响114人  天涯海角我爱你

#import// 创建文件或者文档所在的路径

typedef NS_ENUM(NSInteger, FilePathType) {

DocmuntsType,

CachesType

};

@interface EncodeManager : NSObject

/*

一、沙盒文件管理操作功能

1.Model归档 传入Model 以及 key值

2.反归档Model 传入文档名称 以及 key值

3.数组归档 传入数组 以及key值

4.反归档数组 传入文档名称 以及key值

二、创建/获取 文件夹 和 文档的功能

1.传入文件夹名称在Documents/Caches创建或者获取文件夹整体路径的的功能

2传入文档名称在Documents/Caches创建或者获取文档整体路径的功能

*/

+ (EncodeManager *)shareInstance;

/**********

以下是归档反归档的操作方法

**********/

#pragma mark --- 复杂对象(单独Model)归档 ---

// 传入model 进行归档 返回model的NSData

- (NSData *)archiverModel:(id)model modelKey:(NSString *)modelKey;

#pragma mark -- 复杂对象(单独Model)反归档 ---

// 传入归档model写入文件的路径 返回该model 后面传入model对象 要通过model对象 得到model归档时的key值

- (id)unArchiverModelWithFilePath:(NSString *)filePath modelKey:(NSString *)modelKey;

#pragma mark --- 复杂对象(数组装载model)归档

- (NSData *)archiverArray:(NSArray *)array arrayKey:(NSString *)arrayKey;

#pragma mark --- 复杂对象 (数组装载model)反归档

- (NSArray *)unArchiverArrayWithFilePath:(NSString *)filePath arrayKey:(NSString *)arrayKey;

/**********

以下是在沙盒中Documents/Caches路径下操作文件或文件夹管理的方法

**********/

#pragma mark --- 创建/获取文件夹的方法 ---

// 传入文件夹的名称 返回整个路径 传入0 在documents文件下创建文件夹 传入1 在caches文件下创建文件夹

- (NSString *)creatOrGetFileWithFileName:(NSString *)fileName type:(FilePathType)type;

#pragma mark --- 创建/获取文档的方法 ---

// 传入文档的名称 返回整个路径  传入0 在documents文件下创建文档 传入1 在caches文件下创建文件

- (NSString *)creatOrGetDocWithWithDocName:(NSString *)docName type:(FilePathType)type;

#pragma mark --- 获取Documents路径 ---

- (NSString *)documentsFilePath;

#pragma mark --- 获取Library/Caches路径 ---

- (NSString *)cachesFilePath;

@end

#import "EncodeManager.h"

@implementation EncodeManager

+ (EncodeManager *)shareInstance

{

static EncodeManager *manager = nil;

if (manager == nil)

{

manager = [[EncodeManager alloc] init];

}

return manager;

}

/**********

以下是归档反归档的操作方法

**********/

#pragma mark --- 复杂对象(单一Model数据模型)的归档 ---

- (NSData *)archiverModel:(id)model modelKey:(NSString *)modelKey

{

NSMutableData *data = [NSMutableData data];

NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

[archiver encodeObject:model forKey:modelKey];

[archiver finishEncoding];

return data;

}

#pragma mark -- 复杂对象(单独Model)反归档 ---

// 传入归档model写入文件的路径 返回该model  要通过model对象 得到model归档时的key值

- (id)unArchiverModelWithFilePath:(NSString *)filePath modelKey:(NSString *)modelKey

{

// 2.从路径中获取数据

NSData *data = [NSData dataWithContentsOfFile:filePath];

// 3.创建反归档对象

NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];

// 4.进行对model的反归档读取

id model = [unArchiver decodeObjectForKey:modelKey];

return model;

}

#pragma mark --- 复杂对象(数组装载model)归档

- (NSData *)archiverArray:(NSArray *)array arrayKey:(NSString *)arrayKey

{

NSMutableData *data = [NSMutableData data];

NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

[archiver encodeObject:array forKey:arrayKey];

[archiver finishEncoding];

return data;

}

#pragma mark --- 复杂对象 (数组装载model)反归档

- (NSArray *)unArchiverArrayWithFilePath:(NSString *)filePath arrayKey:(NSString *)arrayKey

{

NSData *data = [NSData dataWithContentsOfFile:filePath];

NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];

NSArray *array = [unArchiver decodeObjectForKey:arrayKey];

return array;

}

/**********

以下是在沙盒中Documents/Caches路径下操作文件或文件夹管理的方法

**********/

#pragma mark --- 创建/获取文件夹的方法 ---

// 传入文件夹的名称 返回整个路径 传入0 在documents文件下创建文件夹 传入1 在caches文件下创建文件夹

- (NSString *)creatOrGetFileWithFileName:(NSString *)fileName type:(FilePathType)type

{

NSString *filePath;

if (type == DocmuntsType)

{

filePath = [[self documentsFilePath] stringByAppendingPathComponent:fileName];

}

else

{

filePath = [[self cachesFilePath] stringByAppendingPathComponent:fileName];

}

NSFileManager *manager = [NSFileManager defaultManager];

if (![manager fileExistsAtPath:filePath])

{

[manager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];

}

return filePath;

}

#pragma mark --- 创建/获取文档的方法 ---

// 传入文档的名称 返回整个路径  传入0 在documents文件下创建文档 传入1 在caches文件下创建文件

- (NSString *)creatOrGetDocWithWithDocName:(NSString *)docName type:(FilePathType)type

{

NSString *filePath;

if (type == DocmuntsType)

{

filePath = [[self documentsFilePath] stringByAppendingPathComponent:docName];

}

else

{

filePath = [[self cachesFilePath] stringByAppendingPathComponent:docName];

}

NSFileManager *manager = [NSFileManager defaultManager];

if (![manager fileExistsAtPath:filePath])

{

[manager createFileAtPath:filePath contents:nil attributes:nil];

}

return filePath;

}

#pragma mark --- 获取Documents路径 ---

- (NSString *)documentsFilePath

{

return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

}

#pragma mark --- 获取Library/Caches路径 ---

- (NSString *)cachesFilePath

{

return [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];

}

@end

上一篇 下一篇

猜你喜欢

热点阅读