NSUserDefaults可以存取一些短小的信息。

比如存入再读出一个字符串到NSUserDefaults:

[cpp] view plaincopy
  1. NSString *string = [NSString stringWithString @"hahaha"];
  2. NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
  3. [ud setObject:string forKey:@"myKey"];
  4. NSString *value;
  5. value = [ud objectForKey:"myKey"];

但是并不是所有的东西都能往里放的。NSUserDefaults只支持: NSString, NSNumber, NSDate, NSArray, NSDictionary.

如果把一个自定义的类存到一个NSArray里,然后再存到NSUserDefaults里也是不能成功的。不信可以试试,如果你成功的请告诉我。

那怎么办呢?

我找到的方法是,让这个自定义类实现<NSCoding>协议中的- (id) initWithCoder: (NSCoder *)coder方法和- (void) encodeWithCoder: (NSCoder *)coder方法(obj-c的协议protocol就是java的接口interface,就是C++的纯虚函数),然后把该自定义的类对象编码到 NSData中,再从NSUserDefaults中进行读取。

粘代码:

假设有这样一个简单的类对象

[cpp] view plaincopy
  1. @interface BusinessCard : NSObject <NSCoding>{
  2. NSString *_firstName;
  3. NSString *_lastName;
  4. }
  5. @property (nonatomic, retain) NSString *_firstName;
  6. @property (nonatomic, retain) NSString *_lastName;
  7. @end;
  8. @implementation BusinessCard
  9. @synthesize _firstName, _lastName;
  10. - (void)dealloc{
  11. [_firstName release];
  12. [_lastName release];
  13. [super dealloc];
  14. }
  15. - (id) initWithCoder: (NSCoder *)coder
  16. {
  17. if (self = [super init])
  18. {
  19. self._firstName = [coder decodeObjectForKey:@"_firstName"];
  20. self._lastName = [coder decodeObjectForKey:@"_lastName"];
  21. }
  22. return self;
  23. }
  24. - (void) encodeWithCoder: (NSCoder *)coder
  25. {
  26. [coder encodeObject:_firstName forKey:@"_firstName"];
  27. [coder encodeObject:_lastName forKey:@"_lastName"];
  28. }
  29. @end

然后再存取时通过NSData做载体:

[cpp] view plaincopy
  1. BusinessCard *bc = [[BusinessCard alloc] init];
  2. NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
  3. NSData *udObject = [NSKeyedArchiver archivedDataWithRootObject:bc];
  4. [ud setObject:udObject forKey:@"myBusinessCard"];
  5. [bc release];
  6. udObject = nil;
  7. udObject = [ud objectForKey:@"myBusinessCard"];
  8. bc = [NSKeyedUnarchiver unarchiveObjectWithData:udObject] ;

以上的代码时由另一个程序中截取的,没有测试过,但意思就是这样了。

如果一个自定义类中由另一个自定义类对象,那么所有嵌套的类都要实现<NSCoding>。

转载于:https://www.cnblogs.com/ejllen/p/3896608.html

NSUserDefaults读取和写入自定义对象相关推荐

  1. iOS NSUserDefaults 简介 NSUserDefaults 存储自定义对象

    摘要 NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密码,网址等,NSUserDefaults肯定是首选,但是如果我们自定义了一个对象,对象保存的是 ...

  2. iOS-NSUserDefaults缓存自定义对象

    转载自:http://my.oschina.net/u/1245365/blog/294449 转载请保留原地址 摘要 NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSStr ...

  3. store 存取数据数组对象_ios – 如何在数组中保存自定义对象并将其存储在NSUserDefaults – iPhone中...

    要在用户默认值上存储和检索具有自定义对象的数组,您可以使用以下方法: -(void)writeArrayWithCustomObjToUserDefaults:(NSString *)keyName ...

  4. Winform中自定义xml配置文件后对节点进行读取与写入

    场景 Winform中自定义xml配置文件,并配置获取文件路径: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100522648 ...

  5. NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象

    2019独角兽企业重金招聘Python工程师标准>>> 一.了解NSUserDefaults以及它可以直接存储的类型 NSUserDefaults是一个单例,在整个程序中只有一个实例 ...

  6. python输出csv文件-Python之读取与写入CSV文件

    原标题:Python之读取与写入CSV文件 本文作者:闫续文 文字编辑:张梦婷 技术总编:张学人 有问题,不要怕!访问 CSV(Comma-Separated Values)格式是电子表格和数据库最常 ...

  7. Flex 序列化自定义类 解决 sharedObject 保存自定义对象

    问题 我想把自定义类实例存储到LSO 解决办法 使用flash.net.registerClassAlias( )方法保留类型信息并把类实例添加到共享对象的data属性上. 讨论 LSOs 使用特殊的 ...

  8. java mongo 获取所有数据库_Spring Batch —从XML读取并写入Mongo

    Java面试必备之JVM+GC教程 这几天闲着在优锐课的java学习必备中学习了,在本文中,了解如何使用Spring Batch通过StaxEventItemReader使用ItemReader读取X ...

  9. python open写入_Python3 open() 函数详解 读取文件写入文件追加文件二进制文件

    Python3 open() 函数详解 读取文件写入文件追加文件二进制文件 open()函数的主要作用是打开文件并返回相应文件对象,使用文件对象可以对当前文件进行读取.写入.追加等操作,默认情况下&q ...

最新文章

  1. Linux --Solr 安装/配置
  2. vue 返回滚动条顶部组件_vue中回到顶部
  3. 【canvas】linejoin——miterLimit
  4. 東京タワー初めてphoto
  5. 实现类去实现接口的时候,将接口的注释一起重写出来设置
  6. layui文档,镜像站
  7. 仿宋GB_2312字体在wps,office中的安装下载使用
  8. 凤凰服务器系统,凤凰系统云服务器
  9. 作业三 使用病毒分析工具对病毒进行分析
  10. 计算机专业四次评估,教育部第四次学科评估:信息与通信工程一级学科排行,仅供参考...
  11. js 新年倒计时 代码
  12. c语言里的pow函数(好理解,易懂)
  13. 限流10万QPS、跨域、过滤器、令牌桶算法-网关Gateway内容柒哥都给你总结在这儿了...
  14. c:forEach--------------JSTL
  15. cml sml区别_【金融常识】SML和CML的区别与联系
  16. Bootstrap前端组件库+构建管理
  17. Matlab feval函数
  18. 树莓派新手入门:烧录系统、换源、基础配置、putty或vnc远程连接
  19. 项目管理9大知识思维导图-精减版+教你如何绘制专属思维导图
  20. CodeBlock快捷键

热门文章

  1. Redis报错解决:RDB: 0 MB of memory used by copy-on-write
  2. python判断CSV文件是否空
  3. python cnn代码详解图解_TextCNN 代码详解(附测试数据集以及GitHub 地址)
  4. python中文名的发件人邮件读取解析_如何使用python收取读取邮件?
  5. Nginx 配置中一个不起眼字符 “/“ 的巨大作用
  6. RabbitMQ(七):RabbitMQ 消费端限流、TTL、死信队列是什么?
  7. Apache httpd设置HTTPS双向认证
  8. 计算机基础在小学的教学论文,小学基础教育论文范文
  9. 云服务器重装系统后卡顿,低延迟云服务器发生卡顿丢包检测方法
  10. java.sql.date格式化_如何将java.sql.date格式化为这种格式:“MM-dd-yyyy”?