码迷,mamicode.com
首页 > 移动开发 > 详细

IOS 归档

时间:2016-12-05 16:57:46      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:lte   tin   nsfile   file   本地   nbsp   extension   add   hint   

   数据持久化 有些时候  需要把数据存到本地(沙河) 方便取出来使用  一般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 功能强大   

 

IOS 归档

标签:lte   tin   nsfile   file   本地   nbsp   extension   add   hint   

原文地址:http://www.cnblogs.com/lxgblog/p/6134380.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!