美文网首页
自定义字典的存储:对象序列化

自定义字典的存储:对象序列化

作者: MichalWilson | 来源:发表于2017-10-23 14:50 被阅读2次

IOS中的自定义字典在存储的时候,如果使用NSUserDefaults来存储会报错Attempt to set a non-property-list object as an NSUserDefaults,因此我们需要把字典封装成一个model类灾后在进行编码和解码的方式来进行存储.

_array = [[NSMutableArray alloc] init];

for (int a = 0; a < 5; a++) {

People *people = [[People alloc] init];

people.name = [NSString stringWithFormat:@"张%d",a];

people.age = a;

[_array addObject:people];

}

NSLog(@"%@",NSHomeDirectory());

NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/array.plist"];

注意:在进行序列化和反序列化的时候,使用的方法要保持一致,加号方法都是用加号方法,减号方法的话都使用减号方法

下面是使用减号方法的代码

1.创建序列化的对象的时候,首先需要创建一个可变的data来储存数据

NSMutableData *data = [[NSMutableData alloc] init];

创建序列化对象

NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

2.通过这个序列化的对象对_array进行编码

[archiver encodeObject:_array forKey:@"myArray"];

3. 完成编码

[archiver finishEncoding];

//等完成编码之后, 那么这个可变的data中就有了数据.

4. 把data写入文件了

[data writeToFile:path atomically:YES];

下面是对象的反序列化

NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/array.plist"];

//第三种方式

//1. 创建反序列化的对象

NSData *data = [NSData dataWithContentsOfFile:path];

NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

//2. 进行反序列化

NSArray *arr = [unArchiver decodeObjectForKey:@"myArray"];

NSLog(@"arr = %@",arr);

//3. 反序列化完成

[unArchiver finishDecoding];

下面是具体的代码链接https://github.com/xuchaofei/saveData

相关文章

  • NSCoding协议

    什么叫对象序列化? 对象序列化就是把对象写入到输出流中,用来存储或者传输,如果不序列化,(自定义对象是无法存储的)...

  • 自定义字典的存储:对象序列化

    IOS中的自定义字典在存储的时候,如果使用NSUserDefaults来存储会报错Attempt to set a...

  • iOS归档看这篇就够了

    归档的作用 之前将数据存储到本地,只能是字符串、数组、字典、NSNuber、BOOL等容器类对象,不能将自定义对象...

  • python序列化与反序列化

    json序列化与反序列化 序列化:dumps()/dump(),将python中字典类型的对象序列化后,转化成js...

  • iOS 杂谈

    字典 字典只能存储对象 key - value 里面存的东西都是键值对 数组 数组里面也只能存储对象 NSNu...

  • DRF-序列化器serializers

    序列化器serializer的介绍: 序列化,序列化器会把模型对象转换成字典,经过response 之后变成jso...

  • Python常用模块pickle——对象序列化

    作用 对Python对象进行序列化,便于存储和传输 Python对象序列化成bytes类型 pickle.dump...

  • java序列化反序列化对象到指定路径

    代码比较简单,逻辑也比较清晰 1、序列化对象,并创建一个file对象 2、把序列化对象存储起来 //将序列化对象存...

  • 你不得不知道的对象的序列化和反序列化

    对象的序列化和反序列化 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在...

  • Python语言基础(四)

    对象的序列化 序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或...

网友评论

      本文标题:自定义字典的存储:对象序列化

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