iOS 数据存储 归档普通对象 NSCoding NSKeyedArchiver
来源:互联网 发布:网络彩票平台代理招聘 编辑:程序博客网 时间:2024/05/16 09:25
1.如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,可以直接用NSKeyedArchiver进行归档和恢复
2.不是所有对象都可以直接用这种方法进行归档,只有遵守了NSCoding协议的对象才可以
3.NSCoding协议有2个方法
encodeWithCoder:
每次归档对象时,都会调用这个方法。一般在这个方法里指定如果归档对象中的每一个实例变量,可以使用encodeObject:forKey:方法归档实例变量
initWithCoder:
每次从文件恢复(解码)对象时,都会调用这个方法。一般在这个方法里指定如何解码文件中的数据为对象的实例变量,可以使用decodeObject:forKey:方法解码实例变量。
实例:NSKeyedArchiver 归档Student对象
.h
#import <Foundation/Foundation.h>@interface MJStudent : NSObject <NSCoding>@property (nonatomic, copy) NSString *no;@property (nonatomic, assign) double height;@property (nonatomic, assign) int age;@end
.m
#import "MJStudent.h"@interface MJStudent() @end@implementation MJStudent/** * 将某个对象写入文件时会调用 * 在这个方法中说清楚哪些属性需要存储 */- (void)encodeWithCoder:(NSCoder *)encoder{ [encoder encodeObject:self.no forKey:@"no"]; [encoder encodeInt:self.age forKey:@"age"]; [encoder encodeDouble:self.height forKey:@"height"];}/** * 从文件中解析对象时会调用 * 在这个方法中说清楚哪些属性需要存储 */- (id)initWithCoder:(NSCoder *)decoder{ if (self = [super init]) { // 读取文件的内容 self.no = [decoder decodeObjectForKey:@"no"]; self.age = [decoder decodeIntForKey:@"age"]; self.height = [decoder decodeDoubleForKey:@"height"]; } return self;}@end
控制器存取:
- (IBAction)save { // 1.新的模型对象 MJStudent *stu = [[MJStudent alloc] init]; stu.no = @"42343254"; stu.age = 20; stu.height = 1.55; // 2.归档模型对象 // 2.1.获得Documents的全路径 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; // 2.2.获得文件的全路径 NSString *path = [doc stringByAppendingPathComponent:@"stu.data"]; // 2.3.将对象归档 [NSKeyedArchiver archiveRootObject:stu toFile:path];}- (IBAction)read { // 1.获得Documents的全路径 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; // 2.获得文件的全路径 NSString *path = [doc stringByAppendingPathComponent:@"stu.data"]; // 3.从文件中读取MJStudent对象 MJStudent *stu = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; NSLog(@"%@ %d %f", stu.no, stu.age, stu.height);}
0 0
- iOS 数据存储 归档普通对象 NSCoding NSKeyedArchiver
- ios-day12-04(ios开发中数据存储之NSKeyedArchiver归档(NSCoding)、普通对象如何归档、普通对象的子类如何归档)
- iOS 归档(NSKeyedArchiver + NSCoding)
- ios数据存储之--对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- ios数据存储之--对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- ios数据存储之--对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- ios数据存储之--模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- ios 沙盒 NSCoding 归档 数据存储
- 数据缓存——NSKeyedArchiver归档(NSCoding)
- 归档NSCoding、NSKeyedArchiver
- iOS开发-进阶:数据存储之-对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- 归档 NSCoding 数据存储小结《IOS编程》 读后总结
- iOS 数据存储 - NSKeyedArchiver
- NSCoding归档数据持久化存储
- 数据存储之归档-NSCoding协议
- iOS开发------本地存储-NSKeyedArchiver & NSKeyedUnarchiver(归档)
- iOS对象持久化归档 NSKeyedArchiver
- ios ---对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- centos 6.6默认iptable规则
- html的文本元素总结
- 并查集图冲突hdu1272
- Python - 连续替换(replace)的正则表达式(re)
- 深入探讨Java 类加载器
- iOS 数据存储 归档普通对象 NSCoding NSKeyedArchiver
- Android环境搭建
- java连接MongoDB数据库
- 双端队列的应用
- PHP中的include和require
- Stange氧探头在S7-400模拟量处理
- 巴菲特认为每个人都该读的9本书
- hdu 2487 Ugly Windows
- iOS开发 数据持久化-归档