NSKeyedArchiver/unArchiver序列化自定义复合模型(模型包含模型)
来源:互联网 发布:提高智商知乎 编辑:程序博客网 时间:2024/05/22 09:52
在这里利用NSKeyedArchiver/unArchiver对自定义的模型进行序列化。在序列化之前要对自定义模式实现NSCoding的2个协议。
NScoding 是一个协议,主要有下面两个方法
-(id)initWithCoder:(NSCoder *)coder;//从coder中读取数据,保存到相应的变量中,即反序列化数据
-(void)encodeWithCoder:(NSCoder *)coder;// 读取实例变量,并把这些数据写到coder中去。序列化数据
NSKeyedUnarchiver 从二进制流读取对象。
NSKeyedArchiver 把对象写到二进制流中去。
Info模型:
Info.h
#import <Foundation/Foundation.h>@interface Info : NSObject<NSCoding>@property(nonatomic, copy)NSString *infoName;@property(nonatomic, assign)NSInteger infoCount;@end
#import "Info.h"@implementation Info-(id)initWithCoder:(NSCoder *)aDecoder{ if (self = [super init]) { self.infoName = [aDecoder decodeObjectForKey:@"infoName"]; self.infoCount = [aDecoder decodeIntegerForKey:@"infoCount"]; } return self;}- (void)encodeWithCoder:(NSCoder *)aCoder{ [aCoder encodeObject:self.infoName forKey:@"infoName"]; [aCoder encodeInteger:self.infoCount forKey:@"infoCount"];}
User模型:
User.h //User模型包含Info模型;
#import <Foundation/Foundation.h>#import "Info.h"@interface User : NSObject<NSCoding>@property(nonatomic, copy)NSString *name;@property(nonatomic, assign)NSInteger age;@property(nonatomic, strong)NSArray *friends;@property(nonatomic, strong)Info *infomation;@end
User.m
#import "User.h"@implementation User- (id)init{ if (self = [super init]) { self.infomation = [[Info alloc] init]; } return self;}-(id)initWithCoder:(NSCoder *)aDecoder{ if (self = [super init]) { self.name = [aDecoder decodeObjectForKey:@"name"]; self.friends = [aDecoder decodeObjectForKey:@"friends"]; self.infomation =[aDecoder decodeObjectForKey:@"infomation"]; self.age = [aDecoder decodeIntegerForKey:@"age"]; } return self;}- (void)encodeWithCoder:(NSCoder *)aCoder{ [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeObject:self.friends forKey:@"friends"]; [aCoder encodeObject:self.infomation forKey:@"infomation"]; [aCoder encodeInteger:self.age forKey:@"age"];}@end
序列化测试代码:
#pragma mark - 序列化测试;- (void)serialTest{ User *user = [[User alloc] init]; user.name = @"zhenjie"; user.age = 22; user.friends = @[@"qiang",@"ze"];// user.infomation = [[Info alloc] init]; user.infomation.infoName = @"my info name"; user.infomation.infoCount = 1; User *user1 = [[User alloc] init]; user1.name = @"zhenjie1"; user1.age = 22; user1.friends = @[@"qiang1",@"ze1"]; // user.infomation = [[Info alloc] init]; user1.infomation.infoName = @"my info name1"; user1.infomation.infoCount = 2; //模型序列化 NSData *data_en = [NSKeyedArchiver archivedDataWithRootObject:user]; [[NSUserDefaults standardUserDefaults] setObject:data_en forKey:@"data"]; NSData *data_de =[[NSUserDefaults standardUserDefaults] objectForKey:@"data"]; User *user_de = [NSKeyedUnarchiver unarchiveObjectWithData:data_de]; /* //模型对象数组序列化 NSArray *arr_en = @[user, user1]; NSData *data_en = [NSKeyedArchiver archivedDataWithRootObject:arr_en]; [[NSUserDefaults standardUserDefaults] setObject:data_en forKey:@"data"]; NSLog(@"----------------\n"); NSData *data_de =[[NSUserDefaults standardUserDefaults] objectForKey:@"data"]; NSArray *arr_de = [NSKeyedUnarchiver unarchiveObjectWithData:data_de]; NSLog(@"===user_de:%@",arr_en); */}
0 0
- NSKeyedArchiver/unArchiver序列化自定义复合模型(模型包含模型)
- 序列模型
- ios ---对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- 自定义模型
- Android中MVC模型(复合模式)
- 模型
- 模型
- 模型
- 模型
- 模型
- 模型
- 模型
- 模型
- 模型
- 模型
- 模板的包含模型
- 包含编译模型
- C++模板编译模型:包含编译模型
- html dom元素操作!
- 2015黑龙江省赛记
- 类的继承与派生(虚拟继承Virtual)
- Cookie/Session机制详解
- linux内核启动过程分析转载
- NSKeyedArchiver/unArchiver序列化自定义复合模型(模型包含模型)
- 重构二叉树
- objective-c和java
- Flex datagrid单元格合并
- 知识点扫盲
- 视频会议图像因为qp值造成的灰屏的bug处理过程
- 动态代理在mybatis接口式编程中的应用
- php深入学习笔记二( 函数内置函数 )
- stm32需要的手册