<NSCoding>存储数据 archivedDataWithRootObject unarchiveObjectWithData
来源:互联网 发布:数字网络配线架 编辑:程序博客网 时间:2024/06/06 05:31
转载自: http://blog.csdn.net/shang_ri_la/article/details/32077325
当你于写数据需要本地存储时,即将你的数据写到硬盘上的时候,你就必须对他进行序列化,转换成二进制文件,从而便于在磁盘上的读写,同理在取出的时候必须将其在反序列化,这样才能将数据读出来,就好比加密和揭秘的过程。
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中进行读取。假设有这样一个简单的类对象view plaincopy to clipboardprint?@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] ;
0 0
- <NSCoding>存储数据 archivedDataWithRootObject unarchiveObjectWithData
- <NSCoding>存储数据 archivedDataWithRootObject unarchiveObjectWithData
- <NSCoding>存储数据 archivedDataWithRootObject unarchiveObjectWithData
- <NSCoding>存储数据 archivedDataWithRootObject unarchiveObjectWithData
- <NSCoding>存储数据 archivedDataWithRootObject unarchiveObjectWithData
- 保存自定义对象 archivedDataWithRootObject unarchiveObjectWithData
- 数据存储(NSCoding)
- <NSCODING> 存储数据 NSUSERDEFAULTS 读取和写入
- ios 沙盒 NSCoding 归档 数据存储
- NSCoding归档数据持久化存储
- iOS数据存储之--NSCoding
- [数据存储之一]NSCoding协议练习
- 数据存储之归档-NSCoding协议
- NSCoding协议,遵循了NSCoding协议的数据模型,就可以利用归档进行数据存储了
- <NSCODING> 存储数据&n…
- 归档 NSCoding 数据存储小结《IOS编程》 读后总结
- iOS 数据存储 归档普通对象 NSCoding NSKeyedArchiver
- iOS数据持久化---NSCoding
- Android实现网络多线程断点续传下载
- JavaScript Notes 1
- 算法导论 15章 动态规划
- php-fpm 启动参数及重要配置详解
- C++函数重载
- <NSCoding>存储数据 archivedDataWithRootObject unarchiveObjectWithData
- JDBC中语句超时与事务
- Java中的== 和 equal
- 摘要
- 第十周课后实践:阅读程序--学生信息管理系统
- 鸡啄米vc++2010系列10(模态对话框及其弹出过程)
- smartupload实现文件的上传、下载
- 提高第22课时,自测
- C语言 字符串替换 多次