iOS-自定义归档 保存数据
两个按钮
// // HMPerson.h // 08-自定义对象归档 // // Created by yz on 14-8-29. // Copyright (c) 2014年 iThinker. All rights reserved. // #import <Foundation/Foundation.h> @interface HMPerson : NSObject<NSCoding> @property (nonatomic, assign) int age; @end // // HMPerson.m // 08-自定义对象归档 // // Created by yz on 14-8-29. // Copyright (c) 2014年 iThinker. All rights reserved. // #import "HMPerson.h" @implementation HMPerson // 在对象归档的时候调用 // 哪些属性需要归档 // 这些属性怎么归档 - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeInt:_age forKey:@"age"]; } // 在对象解档的时候调用 // 哪些属性需要解档 // 这些属性怎么解档 - (id)initWithCoder:(NSCoder *)aDecoder { // 当父类实现了NSCoding,就能调用 [super initWithCoder] if (self = [super init]) { _age = [aDecoder decodeIntForKey:@"age"]; } return self; } @end
// // HMView.h // 08-自定义对象归档 // // Created by yz on 14-8-29. // Copyright (c) 2014年 iThinker. All rights reserved. // #import <UIKit/UIKit.h> @interface HMView : UIView @end // // HMView.m // 08-自定义对象归档 // // Created by yz on 14-8-29. // Copyright (c) 2014年 iThinker. All rights reserved. // #import "HMView.h" @implementation HMView - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code } return self; } // 解析XIB会调用 - (id)initWithCoder:(NSCoder *)aDecoder { if (self = [super initWithCoder:aDecoder]) { } return self; } /* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code } */ @end
// // HMViewController.h // 08-自定义对象归档 // // Created by yz on 14-8-29. // Copyright (c) 2014年 iThinker. All rights reserved. // #import <UIKit/UIKit.h> @interface HMViewController : UIViewController @end // // HMViewController.m // 08-自定义对象归档 // // Created by yz on 14-8-29. // Copyright (c) 2014年 iThinker. All rights reserved. // #import "HMViewController.h" #import "HMPerson.h" @interface HMViewController () @end @implementation HMViewController - (IBAction)save:(id)sender { HMPerson *person = [HMPerson new]; person.age = 18; NSString *docPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0]; // 拼接文件路径 NSString *filePath = [docPath stringByAppendingPathComponent:@"person.data"]; [NSKeyedArchiver archiveRootObject:person toFile:filePath]; } - (IBAction)read:(id)sender { NSString *docPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0]; // 拼接文件路径 NSString *filePath = [docPath stringByAppendingPathComponent:@"person.data"]; HMPerson *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; NSLog(@"%d",p.age); } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end