NSUserDefault是接触比较早的数据持久化方法了,简单易用,但是之前一直没有想过该怎么样才能存储自定义的对象。
今天试了一下:
把一个自定义的Person对象存到数组中,然后把数组作为一个Value,存到本地。想法是好的,但是事实就是很残忍了。。看一下实现和效果:
屏幕快照 2016-04-18 17.44.42.png效果:
屏幕快照 2016-04-18 17.44.19.png给我的就一个大大的崩溃。。
问题出现了不能不处理,最终找到了方案:
1、Person签订NSCoding协议
屏幕快照 2016-04-18 17.47.49.png2、实现NSCoding的方法:
屏幕快照 2016-04-18 17.49.22.png3、初始化对象,将对象编码,然后将数据流存储到NSUserDefault中。
屏幕快照 2016-04-18 17.50.38.png4、读取数据:
屏幕快照 2016-04-18 17.51.20.png效果:
屏幕快照 2016-04-18 17.52.08.png分析:
当调用[NSkeyedArchiver archivedDataWithRootObject:person]方法时,就会触发Person类中的NSCoding协议方法 - (void)encodeWithCoder:(NSCoder*)aCoder方法,将对象编码为数据流。
当调用[NSKeyedUnarchiver unarchiveObjectWithData:data]方法时,就会触发Person类中的NSCoding协议方法 - (id)initWithCoder:(NSCoder*)aDecoder方法,将数据流转为对象。
NSCoding是一个你需要在数据类上要实现的协议以支持数据类和数据流之间的编码和解码。
加油~~
网友评论