美文网首页
iOS-结构化数据存储,使用NSCoder 归档(序列化)&解归

iOS-结构化数据存储,使用NSCoder 归档(序列化)&解归

作者: Mr_Lin_ | 来源:发表于2021-01-25 10:04 被阅读0次

- (void)_archiveListDataWithArray:(NSArray<HomeListModel*> *)modelArray {

    NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

    NSString*cachesPath = [pathArray firstObject];

    NSFileManager *fileManger = [NSFileManager defaultManager];

    //创建文件夹

    NSString *dataPath = [cachesPath stringByAppendingPathComponent:@"HomeListData"];

    NSError*createError;

    [fileManger createDirectoryAtPath:dataPath withIntermediateDirectories:YES attributes:nil error:&createError];

    //创建文件

    NSString *listDataPath = [dataPath stringByAppendingPathComponent:@"listData"];

    //序列化

    NSData *listData = [NSKeyedArchiver archivedDataWithRootObject:modelArray requiringSecureCoding:YES error:nil];

    [fileManger createFileAtPath:listDataPath contents:listData attributes:nil];

    NSData*readListData = [fileManger contentsAtPath:listDataPath];

    ///反序列化

    id unarchiveObj = [NSKeyedUnarchiver unarchivedObjectOfClasses:[NSSet setWithObjects:[NSArray class], [HomeListModel class], nil] fromData:readListData error:nil];

    //查询文件

    __unusedBOOLisExist = [fileManger fileExistsAtPath:listDataPath];

//    if (isExist) {

//        [fileManger removeItemAtPath:listDataPath error:nil];

//    }

    //更新文件

//    NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:listDataPath];

//    [fileHandle seekToEndOfFile];

//    [fileHandle writeData:[@"def" dataUsingEncoding:NSUTF8StringEncoding] error:nil];

//    [fileHandle synchronizeFile];

//    [fileHandle closeFile];

}

#import "HomeListModel.h"

@implementation HomeListModel

#pragma mark - NSSecureCoding

- (nullable instancetype)initWithCoder:(NSCoder *)coder {

    self= [super init];

    if(self) {

        self.deptName= [coder decodeObjectForKey:@"deptName"];

        self.docName= [coder decodeObjectForKey:@"docName"];

        self.docGoodAtNames= [coder decodeObjectForKey:@"docGoodAtNames"];

        self.jobTitleName= [coder decodeObjectForKey:@"jobTitleName"];

        self.url= [coder decodeObjectForKey:@"url"];

    }

    return self;

}

- (void)encodeWithCoder:(NSCoder*)coder {

    [coder encodeObject:self.deptName forKey:@"deptName"];

    [coder encodeObject:self.docName forKey:@"docName"];

    [coder encodeObject:self.docGoodAtNames forKey:@"docGoodAtNames"];

    [coder encodeObject:self.jobTitleName forKey:@"jobTitleName"];

    [coder encodeObject:self.url forKey:@"url"];

}

+ (BOOL)supportsSecureCoding {

    return YES;

}

#pragma mark - public method

- (void)congifutationWithDic:(NSDictionary *)dic {

    self.deptName= dic[@"deptName"];

    self.docName= dic[@"docName"];

    self.docGoodAtNames = dic[@"docGoodAtNames"];

    self.jobTitleName = dic[@"jobTitleName"];

    self.url= dic[@"url"];

}

@end

相关文章

  • iOS-结构化数据存储,使用NSCoder 归档(序列化)&解归

    - (void)_archiveListDataWithArray:(NSArray

  • Runtime妙用之-归档

    对于数据存储的归档方式,实现NSCoding协议 - (void)encodeWithCoder:(NSCoder...

  • iOS归档和解档

    关键词: 归档:数据持久化的一种方式,是将数据进行编码序列化之后存储的过程。适用于小量数据的存储。 解档:对归档的...

  • 2018-03-12

    ios通过Runtime动态完成数据存储(归档/解档) 实现数据序列化和反序列化,必定实现的两个方法: 当属性比较...

  • iOS-归档NSCoding序列化

    归档 归档->数据持久化的方式->加密(把文件加密《不是把数据加密》 归档分为: 1、存储数据(编码、序列化、归档...

  • 归档 & 解档

    1.什么是 归档 和 解档 数据本地存储持久化的一种。归档:对象的序列化,通过某种格式把对象保存成本地文件。解档:...

  • CoreData的使用(二)

    一、概述数据存储可以使用plist,NSUserDefault,归档解档,sqlite,CoreDataCoreD...

  • iOS开发之归档

    前言 归档:将对转序列化成二级制数据,并保存在文件中。 解归档:将归档后的数据反序列化成明码(能够看懂)对象,供我...

  • 归档

    归档是将一种或者多种数据类型进行序列化,解归档的过程就是将序列化的数据进行反序列化的解码,这里需要注意一点,归档的...

  • iOS本地化存储

    一、数据存储的方式: 1、NSKeyedAchiever//序列化 存放对象,归档保存 缺点:归档的形式来保存...

网友评论

      本文标题:iOS-结构化数据存储,使用NSCoder 归档(序列化)&解归

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