归档于结档

版权声明:iOS技术小牛 https://blog.csdn.net/weixin_42925415/article/details/85120061

我们应该先明白(归档–结档),这两个有什么区别?
假设,我们创一个 Model 类,通过归档和结档,来让 Model 数据持久化,同时展示到表格上.
归档:把 Model 数据放到 dom 文件里,同时用加到数组里,展示到表格上.
结档:读取 dom 文件里的数据,展示到表格上

开始先了解路径

//先写个路径是 dom 的

    NSString *DomPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];

//再创建一个路径,创建文件.这里的 qq.data 可以是任意的,但尽量别起 xx.plist 或者是系统能读取的文件名
NSString *FilePath=[DomPath stringByAppendingPathComponent:@"qq.data"];
//这两句可以写成一句话
 [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"teacher.data"];
//一般应该把路径定位宏变量 名字自己取


 //归档代码
 // RootObject  是写入你要数据持久化的对象,加入 Model 的话,我们一般加入数组,方便数据的展示
    [NSKeyedArc`hiver archiveRootObject:array toFile:Kfilepath];
//Model 在.h 文件中签订<NSCoding>协议,在.m 中,会提示你完成两个协议方法
//告诉系统归档哪些属性
-(void)encodeWithCoder:(NSCoder *)aCoder{
//aCoder enconde 不仅仅是 Object,同时有各种值,写的时候注意一一对应
    [aCoder encodeObject:_name forKey:@"name"];
    [aCoder encodeObject:_number forKey:@"number"];
}
//告诉系统结档哪些属性

-(instancetype)initWithCoder:(NSCoder *)aDecoder{
    self=[super init];
    if (self) {
    //归档哪些属性,结档哪些属性
        _name =[aDecoder decodeObjectForKey:@"name"];
        _number=[aDecoder decodeObjectForKey:@"number"];
    }
    return self;
}
//结档,一般在视图显示的时候调用,所以我们写在 viewdidload 
 array= [NSKeyedUnarchiver unarchiveObjectWithFile:Kfilepath];

猜你喜欢

转载自blog.csdn.net/weixin_42925415/article/details/85120061