2016笔记——NSUserDefault

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.png

2、实现NSCoding的方法:

屏幕快照 2016-04-18 17.49.22.png

3、初始化对象,将对象编码,然后将数据流存储到NSUserDefault中。

屏幕快照 2016-04-18 17.50.38.png

4、读取数据:

屏幕快照 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是一个你需要在数据类上要实现的协议以支持数据类和数据流之间的编码和解码。

加油~~

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,693评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • OC语言基础 1.类与对象 类方法 OC的类方法只有2种:静态方法和实例方法两种 在OC中,只要方法声明在@int...
    奇异果好补阅读 4,362评论 0 11
  • 一、【掌握】block的typedef 定义1个叫做:MyBlock的数据类型,它存储的代码必须返回int,,必须...
    萤火虫儿飞_阅读 1,276评论 0 0
  • 搭了几个检查移动基站的工作人员的车到了察汗乌苏蒙古族乡。这是一个依省道而建的蒙古族村落的集镇。沿着省道走了...
    tangpeiliang阅读 216评论 0 0