利用runtime 实现自定义Model归档
2016-02-23 11:11
375 查看
直接代码:
Model 归档
@interface BModel : NSObject <NSCoding>
/**
* 对象的唯一id
*/
@property (nonatomic,strong) NSNumber *guid;
/**
* 创建时间
*/
@property(nonatomic,strong) NSString *created_at;
/**
* 对象类型
*/
@property(nonatomic,strong) NSString *object_name;
/**
* 归档
*
* @param path 路径
*
* @return 成功YES 失败NO
*/
- (BOOL)archiveRootObjectWithPath:(NSString *)path;
/**
* 解档
*
* @param path 路径
*
* @return 成功YES 失败NO
*/
- (id)unarchiveObjectWithFileWithPath:(NSString *)path;
@end
#import "BModel.h"
#import <objc/runtime.h>
@implementation BModel
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
self = [super init];
if (self) {
unsigned int count = 0;
Ivar *ivars = class_copyIvarList([self class], &count);
for (int i = 0; i<count; i++) {
// 取出i位置对应的成员变量
Ivar ivar = ivars[i];
// 查看成员变量
const char *name = ivar_getName(ivar);
// 归档
NSString *key = [NSString stringWithUTF8String:name];
id value = [aDecoder decodeObjectForKey:key];
// 设置到成员变量身上
[self setValue:value forKey:key];
}
free(ivars);
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder{
unsigned int count = 0;
Ivar *ivars = class_copyIvarList([self class], &count);
for (int i = 0; i<count; i++) {
// 取出i位置对应的成员变量
Ivar ivar = ivars[i];
// 查看成员变量
const char *name = ivar_getName(ivar);
// 归档
NSString *key = [NSString stringWithUTF8String:name];
id value = [self valueForKey:key];
[aCoder encodeObject:value forKey:key];
}
}
- (BOOL)archiveRootObjectWithPath:(NSString *)path{
return [NSKeyedArchiver archiveRootObject:self toFile:path];
}
- (id)unarchiveObjectWithFileWithPath:(NSString *)path{
return [NSKeyedUnarchiver unarchiveObjectWithFile:path];
}
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Java Runtime Environment 5.0 Update 12 下载
- php set_magic_quotes_runtime() 函数过时解决方法
- Asp.Net 程序错误Runtime Error原因与解决
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- System 类 和 Runtime 类的常用用法介绍
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解