NSUserDefaults读取和写入自定义对象
NSUserDefaults可以存取一些短小的信息。
比如存入再读出一个字符串到NSUserDefaults:
- NSString *string = [NSString stringWithString @"hahaha"];
- NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
- [ud setObject:string forKey:@"myKey"];
- NSString *value;
- 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中进行读取。
粘代码:
假设有这样一个简单的类对象
- @interface BusinessCard : NSObject <NSCoding>{
- NSString *_firstName;
- NSString *_lastName;
- }
- @property (nonatomic, retain) NSString *_firstName;
- @property (nonatomic, retain) NSString *_lastName;
- @end;
- @implementation BusinessCard
- @synthesize _firstName, _lastName;
- - (void)dealloc{
- [_firstName release];
- [_lastName release];
- [super dealloc];
- }
- - (id) initWithCoder: (NSCoder *)coder
- {
- if (self = [super init])
- {
- self._firstName = [coder decodeObjectForKey:@"_firstName"];
- self._lastName = [coder decodeObjectForKey:@"_lastName"];
- }
- return self;
- }
- - (void) encodeWithCoder: (NSCoder *)coder
- {
- [coder encodeObject:_firstName forKey:@"_firstName"];
- [coder encodeObject:_lastName forKey:@"_lastName"];
- }
- @end
然后再存取时通过NSData做载体:
- BusinessCard *bc = [[BusinessCard alloc] init];
- NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
- NSData *udObject = [NSKeyedArchiver archivedDataWithRootObject:bc];
- [ud setObject:udObject forKey:@"myBusinessCard"];
- [bc release];
- udObject = nil;
- udObject = [ud objectForKey:@"myBusinessCard"];
- bc = [NSKeyedUnarchiver unarchiveObjectWithData:udObject] ;
以上的代码时由另一个程序中截取的,没有测试过,但意思就是这样了。
如果一个自定义类中由另一个自定义类对象,那么所有嵌套的类都要实现<NSCoding>。
转载于:https://www.cnblogs.com/ejllen/p/3896608.html
NSUserDefaults读取和写入自定义对象相关推荐
- iOS NSUserDefaults 简介 NSUserDefaults 存储自定义对象
摘要 NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密码,网址等,NSUserDefaults肯定是首选,但是如果我们自定义了一个对象,对象保存的是 ...
- iOS-NSUserDefaults缓存自定义对象
转载自:http://my.oschina.net/u/1245365/blog/294449 转载请保留原地址 摘要 NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSStr ...
- store 存取数据数组对象_ios – 如何在数组中保存自定义对象并将其存储在NSUserDefaults – iPhone中...
要在用户默认值上存储和检索具有自定义对象的数组,您可以使用以下方法: -(void)writeArrayWithCustomObjToUserDefaults:(NSString *)keyName ...
- Winform中自定义xml配置文件后对节点进行读取与写入
场景 Winform中自定义xml配置文件,并配置获取文件路径: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100522648 ...
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
2019独角兽企业重金招聘Python工程师标准>>> 一.了解NSUserDefaults以及它可以直接存储的类型 NSUserDefaults是一个单例,在整个程序中只有一个实例 ...
- python输出csv文件-Python之读取与写入CSV文件
原标题:Python之读取与写入CSV文件 本文作者:闫续文 文字编辑:张梦婷 技术总编:张学人 有问题,不要怕!访问 CSV(Comma-Separated Values)格式是电子表格和数据库最常 ...
- Flex 序列化自定义类 解决 sharedObject 保存自定义对象
问题 我想把自定义类实例存储到LSO 解决办法 使用flash.net.registerClassAlias( )方法保留类型信息并把类实例添加到共享对象的data属性上. 讨论 LSOs 使用特殊的 ...
- java mongo 获取所有数据库_Spring Batch —从XML读取并写入Mongo
Java面试必备之JVM+GC教程 这几天闲着在优锐课的java学习必备中学习了,在本文中,了解如何使用Spring Batch通过StaxEventItemReader使用ItemReader读取X ...
- python open写入_Python3 open() 函数详解 读取文件写入文件追加文件二进制文件
Python3 open() 函数详解 读取文件写入文件追加文件二进制文件 open()函数的主要作用是打开文件并返回相应文件对象,使用文件对象可以对当前文件进行读取.写入.追加等操作,默认情况下&q ...
最新文章
- Linux --Solr 安装/配置
- vue 返回滚动条顶部组件_vue中回到顶部
- 【canvas】linejoin——miterLimit
- 東京タワー初めてphoto
- 实现类去实现接口的时候,将接口的注释一起重写出来设置
- layui文档,镜像站
- 仿宋GB_2312字体在wps,office中的安装下载使用
- 凤凰服务器系统,凤凰系统云服务器
- 作业三 使用病毒分析工具对病毒进行分析
- 计算机专业四次评估,教育部第四次学科评估:信息与通信工程一级学科排行,仅供参考...
- js 新年倒计时 代码
- c语言里的pow函数(好理解,易懂)
- 限流10万QPS、跨域、过滤器、令牌桶算法-网关Gateway内容柒哥都给你总结在这儿了...
- c:forEach--------------JSTL
- cml sml区别_【金融常识】SML和CML的区别与联系
- Bootstrap前端组件库+构建管理
- Matlab feval函数
- 树莓派新手入门:烧录系统、换源、基础配置、putty或vnc远程连接
- 项目管理9大知识思维导图-精减版+教你如何绘制专属思维导图
- CodeBlock快捷键
热门文章
- Redis报错解决:RDB: 0 MB of memory used by copy-on-write
- python判断CSV文件是否空
- python cnn代码详解图解_TextCNN 代码详解(附测试数据集以及GitHub 地址)
- python中文名的发件人邮件读取解析_如何使用python收取读取邮件?
- Nginx 配置中一个不起眼字符 “/“ 的巨大作用
- RabbitMQ(七):RabbitMQ 消费端限流、TTL、死信队列是什么?
- Apache httpd设置HTTPS双向认证
- 计算机基础在小学的教学论文,小学基础教育论文范文
- 云服务器重装系统后卡顿,低延迟云服务器发生卡顿丢包检测方法
- java.sql.date格式化_如何将java.sql.date格式化为这种格式:“MM-dd-yyyy”?