object-c中自定义对象的归档,实现起来就是使用NSCoding协议,调用其中的两个方法
1 2 3
| -(id) initWithCoder:(NSCoder *)aDecoder
-(void) encodeWithCoder:(NSCoder *)aCoder
|
简单的创建一个user类
User.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
#import "User.h"
@implementation User
#define AGE @"age" #define NICKNAME @"nickname" #define FIRSTNAME @"firstname" #define LASTNAME @"lastname" #define PASSWORD @"password" #define EMAIL @"email"
@synthesize nickname = _nickname; @synthesize firstname = _firstname; @synthesize lastname = _lastname; @synthesize email = _email; @synthesize password = _password;
-(id) initWithCoder:(NSCoder *)aDecoder { self = [super init]; if(self != nil){ _age = [aDecoder decodeObjectForKey:AGE]; _nickname = [aDecoder decodeObjectForKey:NICKNAME]; _firstname = [aDecoder decodeObjectForKey:FIRSTNAME]; _lastname = [aDecoder decodeObjectForKey:LASTNAME]; _email = [aDecoder decodeObjectForKey:EMAIL]; _password = [aDecoder decodeObjectForKey:PASSWORD]; self.age = _age; self.nickname = _nickname; self.firstname = _firstname; self.lastname = _lastname; self.email = _email; self.password = _password; } return self; }
-(void) encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:_age forKey:AGE]; [aCoder encodeObject:_nickname forKey:NICKNAME]; [aCoder encodeObject:_firstname forKey:FIRSTNAME]; [aCoder encodeObject:_lastname forKey:LASTNAME]; [aCoder encodeObject:_email forKey:EMAIL]; [aCoder encodeObject:_password forKey:PASSWORD]; } @end
|
User.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
#import <Foundation/Foundation.h>
@interface User : NSObject<NSCoding>
@property (nonatomic, copy) NSString *nickname; @property (nonatomic, copy) NSString *age; @property (nonatomic, copy) NSString *email; @property (nonatomic, copy) NSString *password; @property (nonatomic, copy) NSString *firstname; @property (nonatomic, copy) NSString *lastname;
@end
|
gowhich给出了简单的实现过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
#import <Foundation/Foundation.h> #import "User.h"
int main(int argc, const char * argv[]) {
@autoreleasepool { User *user = [[User alloc] init]; user.age = @"19"; user.nickname = @"Durban"; user.lastname = @"zhang"; user.firstname = @"dapeng"; user.email = @"xx@xx"; user.password = @"123456"; NSString *homeDir = NSHomeDirectory(); NSString *filePath = [homeDir stringByAppendingPathComponent:@"user.info"]; BOOL success = [NSKeyedArchiver archiveRootObject:user toFile:filePath]; if(success) { NSLog(@"sucess create archiver"); } NSString *homeDirectory = NSHomeDirectory(); NSString *dataFilePath = [homeDirectory stringByAppendingPathComponent:@"user.info"]; User *userInfo = [NSKeyedUnarchiver unarchiveObjectWithFile:dataFilePath]; NSLog(@"age = %@, email = %@, nickname = %@, lastname = %@, firstname = %@, password = %@", userInfo.age,userInfo.email,userInfo.nickname,userInfo.lastname,userInfo.firstname,userInfo.password); } return 0; }
|
得到的结果跟我们添加的结果是一样的
gowhich得到的结果
1
| 2013-11-22 11:30:38.678 CustomArchiveDemo[37027:303] age = 19, email = xx@xx, nickname = Durban, lastname = zhang, firstname = dapeng, password = 123456
|