iOS 归档宏
2016-03-23 17:38
453 查看
1.归档的宏
#define OBJC_STRINGIFY(x) @#x
#define encodeObject(x) [aCoder encodeObject:x forKey:OBJC_STRINGIFY(x)]
#define decodeObject(x) x = [aDecoder decodeObjectForKey:OBJC_STRINGIFY(x)]
#define encodeBool(x) [aCoder encodeBool:x forKey:OBJC_STRINGIFY(x)]
#define decodeBool(x) x = [aDecoder decodeBoolForKey:OBJC_STRINGIFY(x)]
#define encodeInt(x) [aCoder encodeInt:x forKey:OBJC_STRINGIFY(x)]
#define decodeInt(x) x = [aDecoder decodeIntForKey:OBJC_STRINGIFY(x)]
#define encodeInteger(x) [aCoder encodeInteger:x forKey:OBJC_STRINGIFY(x)]
#define decodeInteger(x) x = [aDecoder decodeIntegerForKey:OBJC_STRINGIFY(x)]
#define encodeFloat(x) [aCoder encodeFloat:x forKey:OBJC_STRINGIFY(x)]
#define decodeFloat(x) x = [aDecoder decodeFloatForKey:OBJC_STRINGIFY(x)]
#define encodeDouble(x) [aCoder encodeDouble:x forKey:OBJC_STRINGIFY(x)]
#define decodeDouble(x) x = [aDecoder decodeDoubleForKey:OBJC_STRINGIFY(x)]
2.归档的数据类型可以是 int float double integer bool object 和字符串 (字符串 数组 归档都是按对象处理)
3.如果模型中存在这些属性
@property (nonatomic,assign) NSInteger filmID;
@property (nonatomic,copy) NSString* race;
4.来到.m文件来实现此方法
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self)
{
decodeInt(_filmID);
decodeObject(_race);
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder
{
encodeInt(_filmID);
encodeObject(_race);
}
5.最好还是有个工具类(ToolsData),直接调用次方法就能取到值 ,在这个工具类中,写两个类方法
+ (NSDictionary*)medalsDetail;
+ (void)storeMedalDetailData:(NSDictionary*)medals;
6.再次工具类中实现这两个方法
+ (NSDictionary*)medalsDetail
{
NSData* data = [[NSUserDefaults standardUserDefaults] objectForKey:@"medals_Detail"];
if (data) {
return [NSKeyedUnarchiver unarchiveObjectWithData:data];
}
return nil;
}
+ (void)storeMedalDetailData:(NSDictionary*)medals
{
NSData* medalsData = [NSKeyedArchiver archivedDataWithRootObject:medals];
if (medalsData)
{
[[NSUserDefaults standardUserDefaults] setObject:medalsData forKey:@"medals_Detail"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
}
综上所述就实现归档
#define OBJC_STRINGIFY(x) @#x
#define encodeObject(x) [aCoder encodeObject:x forKey:OBJC_STRINGIFY(x)]
#define decodeObject(x) x = [aDecoder decodeObjectForKey:OBJC_STRINGIFY(x)]
#define encodeBool(x) [aCoder encodeBool:x forKey:OBJC_STRINGIFY(x)]
#define decodeBool(x) x = [aDecoder decodeBoolForKey:OBJC_STRINGIFY(x)]
#define encodeInt(x) [aCoder encodeInt:x forKey:OBJC_STRINGIFY(x)]
#define decodeInt(x) x = [aDecoder decodeIntForKey:OBJC_STRINGIFY(x)]
#define encodeInteger(x) [aCoder encodeInteger:x forKey:OBJC_STRINGIFY(x)]
#define decodeInteger(x) x = [aDecoder decodeIntegerForKey:OBJC_STRINGIFY(x)]
#define encodeFloat(x) [aCoder encodeFloat:x forKey:OBJC_STRINGIFY(x)]
#define decodeFloat(x) x = [aDecoder decodeFloatForKey:OBJC_STRINGIFY(x)]
#define encodeDouble(x) [aCoder encodeDouble:x forKey:OBJC_STRINGIFY(x)]
#define decodeDouble(x) x = [aDecoder decodeDoubleForKey:OBJC_STRINGIFY(x)]
2.归档的数据类型可以是 int float double integer bool object 和字符串 (字符串 数组 归档都是按对象处理)
3.如果模型中存在这些属性
@property (nonatomic,assign) NSInteger filmID;
@property (nonatomic,copy) NSString* race;
4.来到.m文件来实现此方法
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self)
{
decodeInt(_filmID);
decodeObject(_race);
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder
{
encodeInt(_filmID);
encodeObject(_race);
}
5.最好还是有个工具类(ToolsData),直接调用次方法就能取到值 ,在这个工具类中,写两个类方法
+ (NSDictionary*)medalsDetail;
+ (void)storeMedalDetailData:(NSDictionary*)medals;
6.再次工具类中实现这两个方法
+ (NSDictionary*)medalsDetail
{
NSData* data = [[NSUserDefaults standardUserDefaults] objectForKey:@"medals_Detail"];
if (data) {
return [NSKeyedUnarchiver unarchiveObjectWithData:data];
}
return nil;
}
+ (void)storeMedalDetailData:(NSDictionary*)medals
{
NSData* medalsData = [NSKeyedArchiver archivedDataWithRootObject:medals];
if (medalsData)
{
[[NSUserDefaults standardUserDefaults] setObject:medalsData forKey:@"medals_Detail"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
}
综上所述就实现归档
相关文章推荐
- ios开发集成支付宝
- iOS 无缝连接滚动轮播图的一种实现思路
- iOS十六进制和字符串的相互转换
- iOS App设计模式开发之适配器模式使用的实战演练
- iOS _ 复制内容到剪切板
- 设计模式中的Memento备忘录模式的在iOS App开发中的运用
- iOS中数字的格式化 NSNumberFormatter
- iOS开发之制作越狱ios设备ipa包
- ios 富文本编辑器
- iOS 点击按钮实现拨打电话,发送短信功能
- IOS pod update 慢慢慢
- IOS图片和按钮在屏幕中随意拖动
- IOS开发之——keychain使用介绍
- IOS ScrollView 子控件滑动手势冲突
- iOS TableView 自带可拖动重排功能
- iOS开发--动画篇之layout动画深入
- IOS学习 autolayout 自动布局 代码与界面设置截图
- iOS与JS交互实战篇(ObjC版)
- iOS开发:创建真机调试证书
- iOS KVC 和 KVO 简单介绍