美文网首页
归档和反归档的封装

归档和反归档的封装

作者: 天涯海角我爱你 | 来源:发表于2016-06-14 21:02 被阅读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

相关文章

  • 归档和反归档的封装

    #import// 创建文件或者文档所在的路径 typedef NS_ENUM(NSInteger, FilePa...

  • 归档和反归档

    归档和反归档 归档和反归档 都遵循 NSCoding协议 .h中 学要实现归档和反归档的属性 .m中 是实现归档...

  • 谈谈MJExtension和YYmodel归档反归档搭配NSUs

    使用归档反归档需要遵守NSCoding协议,实现协议里的归档和反归档方法等等,很是麻烦。(网上很多介绍这里不进行介...

  • 归档反归档

    归档 反归档

  • 浅析iOS中的归档与反归档

    今天我们要搞一搞iOS开发当中的归档和反归档,在进入正题之前,我们需要了解一下归档和反归档是干什么用的。 所谓归档...

  • 复杂对象利用runtime快速归档

    首先,归档和反归档的对象需要遵从coding协议@interface YCBreakDownModel : NSO...

  • NSKeyedArchiver归档反归档

    数据持久化分析 在我们开发一个app时,一个重要的问题就是数据持久化问题,如何保存用户的设置信息,如何保存上次关闭...

  • 归档与反归档

    ios应用数据存储方式(归档) 一、简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才...

  • 缓存之归档、反归档

    归档反归档是数据存储方式的一种。归档将复杂数据结构转换成NSData进行存储,反归档将NSData转成复杂数据结构...

  • 归档反归档的坑

    今天的项目中由于后台返回的数据有点别致,8800多条数据存放在一个数组中.所以我在前端处理数据,并存到了一个数组和...

网友评论

      本文标题:归档和反归档的封装

      本文链接:https://www.haomeiwen.com/subject/onmudttx.html