IOS 中NSUserDefaults读取和写入自定义对象的实现方法
发布时间 - 2026-01-11 03:17:42 点击率:次IOS 中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>。
如有疑问请留言或到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# NSUserDefaults读取和写入自定义对象
# IOS中NSUserDefaults的使用方法
# iOS 本地存储NSUserDefaults封装代码
# iOS数据持久化KeyChain数据操作详解
# iOS用两行代码完美解决数据持久化
# iOS数据持久化UserDefaults封装器使用详解
# 自定义
# 然后再
# 如果你
# 告诉我
# 都要
# 如有
# 都能
# 希望能
# 不信
# 这样一个
# 谢谢大家
# 往里
# 或到
# 类中
# 把该
# 再读
# 疑问请
# NSArray
# 类存到
# NSDate
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
java ZXing生成二维码及条码实例分享
如何快速搭建虚拟主机网站?新手必看指南
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
如何基于云服务器快速搭建个人网站?
IOS倒计时设置UIButton标题title的抖动问题
jQuery validate插件功能与用法详解
Laravel用户密码怎么加密_Laravel Hash门面使用教程
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
如何有效防御Web建站篡改攻击?
详解Oracle修改字段类型方法总结
linux写shell需要注意的问题(必看)
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
三星、SK海力士获美批准:可向中国出口芯片制造设备
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
如何在香港服务器上快速搭建免备案网站?
如何在IIS管理器中快速创建并配置网站?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
详解jQuery停止动画——stop()方法的使用
,怎么在广州志愿者网站注册?
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
Laravel storage目录权限问题_Laravel文件写入权限设置
打造顶配客厅影院,这份100寸电视推荐名单请查收
Laravel API资源类怎么用_Laravel API Resource数据转换
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
JavaScript如何实现错误处理_try...catch如何捕获异常?
清除minerd进程的简单方法
香港服务器WordPress建站指南:SEO优化与高效部署策略
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
利用 Google AI 进行 YouTube 视频 SEO 描述优化
香港服务器建站指南:免备案优势与SEO优化技巧全解析
JavaScript模板引擎Template.js使用详解
如何在 React 中条件性地遍历数组并渲染元素
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何快速生成凡客建站的专业级图册?
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
Python高阶函数应用_函数作为参数说明【指导】
Java遍历集合的三种方式
Laravel如何处理异常和错误?(Handler示例)
Laravel如何实现API速率限制?(Rate Limiting教程)
济南网站建设制作公司,室内设计网站一般都有哪些功能?
Laravel如何使用Blade组件和插槽?(Component代码示例)
高防服务器租用指南:配置选择与快速部署攻略
米侠浏览器网页背景异常怎么办 米侠显示修复
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程

