• IOS 归档


       数据持久化 有些时候  需要把数据存到本地(沙河) 方便取出来使用  一般ios 里用的较多的是数据库 和plist文件

       但是由于格式限制  你不能直接把模型存进去 因为他们不支持模型这个类型  所以我们会用到归档。

        我们利用 NSData *data = [NSKeyedArchiver archivedDataWithRootObject:model];把传入的模型model归档成二进制 写入plist或者数据库 在利用解归档将数据解析出来 但是在用归档之前 我们要了解一点 ios是按照键值对存储数据  即  KEY —value 一个间对应一个值   如果是我们的自定义对象 是没有键的  所以我们要重写1)encodeWithCoder: 2)initWithCoder:  3)copyWithZone:这三个方法  但是为了偷懒      我用了    MJExtension  

      有现成的不用 非要花一天左右重写方法 那不是我的风格    所以我很喜欢动漫冰果里面的名言    @"能不做的事就不做。非要做不可的话就从简。"

     我的  cell   数据模型 

    #import <Foundation/Foundation.h>

    #import <UIKit/UIKit.h>

    @interface ContentModel : NSObject

    @property (nonatomic ,strong) UIImage *cellImage;

    @property (nonatomic ,copy)NSString *cellText;

    @end

    #import "ContentModel.h"

    #import "MJExtension.h"

    @implementation ContentModel

    MJCodingImplementation//归档的关键 此处可以省略你几百行代码 

    @end

    因为我的数据层次太多 每一层不得不用到归档问题    所以下面我只贴出一点点代码   关于模型归档用到的地方 在获取到数据源的地方  解析到模型数据的时候  归档成NSData    self.contentModelArray    解析获得的数据是数组类型

                         NSMutableArray *modelarray =[[NSMutableArray alloc]init];

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

                                  ContentModel *model = self.contentModelArray[i];

                                  NSData *data = [NSKeyedArchiver archivedDataWithRootObject:model];

                                  [modelarray addObject:data];

                              }

     这里是存储路径  存到沙河      document路径的diandian文件夹里plist文件

     NSArray * path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

                        NSString * documentPath = [path objectAtIndex:0];

                        NSFileManager *fiemanager =[NSFileManager defaultManager];

                        NSString *myfile =[documentPath stringByAppendingPathComponent:@"diandian"];//点点文件夹

                        BOOL res =[fiemanager createDirectoryAtPath:myfile withIntermediateDirectories:YES attributes:nil error:nil];

                        if(res){//文件夹存在  将数组写到 text.plist文件中

                            NSString *filepath =[myfile stringByAppendingPathComponent:@"text.plist"];

                           [modelarray writeToFile:filepath atomically:YES];//写到plist

                        }

     要用时 通过沙河找到plist  取出数组里面的元素 利用解归档将模型还原出来  取相应的值给cell就行      ContentModel *model = [NSKeyedUnarchiver unarchiveObjectWithData:数组元素(modelarray[i])];

    字典 字符串 数组可以直接写到plist  但是自定义的对象需要我们重写方法  所以建议三方MJ 功能强大   

  • 相关阅读:
    人生苦短,Let's Go目录
    Python之路目录
    asyncio异步编程
    Golang实现集合(set)
    Python常用功能函数系列总结(四)之数据库操作
    Python常用功能函数系列总结(三)
    Python常用功能函数系列总结(二)
    Python爬取中国知网文献、参考文献、引证文献
    Python常用功能函数系列总结(一)
    Go语言系列之标准库ioutil
  • 原文地址:https://www.cnblogs.com/lxgblog/p/6134380.html
Copyright © 2020-2023  润新知