首先遵循 NSCoding 协议 并实现;
@interface BigPerson : NSObject <NSCoding>
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) int age;
@property (nonatomic, assign) BOOL sex;
@property (nonatomic, strong) NSArray *nikeNameArr;
@end
#import "BigPerson.h"
@implementation BigPerson
/** 归档 */
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInt:self.age forKey:@"age"];
[aCoder encodeBool:self.sex forKey:@"sex"];
[aCoder encodeObject:self.nikeNameArr forKey:@"nikeNameArr"];
}
/** 解档 */
- (instancetype)initWithCoder:(NSCoder *)coder
{
self = [super init];
if (self) {
self.name = [coder decodeObjectForKey:@"name"];
self.age = [coder decodeIntForKey:@"age"];
self.sex = [coder decodeBoolForKey:@"sex"];
self.nikeNameArr = [coder decodeObjectForKey:@"nikeNameArr"];
}
return self;
}
- (NSString *)description
{
return [NSString stringWithFormat:@"name:%@, age:%d, sex:%@, nickNameArr:%@", self.name, self.age, self.sex ? @"男" : @"女", self.nikeNameArr];
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSString *document = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSString *path = [document stringByAppendingPathComponent:@"bigPerson"];
NSLog(@"%@", path);
// BigPerson *bigPerson = [[BigPerson alloc] init];
// bigPerson.name = @"小明";
// bigPerson.age = 20;
// bigPerson.sex = YES;
// bigPerson.nikeNameArr = @[@"xiaoming1", @"xiaoming2", @"xiaoming3"];
// NSLog(@"%d", [NSKeyedArchiver archiveRootObject:bigPerson toFile:path]);
//
// BigPerson *ps = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
// NSLog(@"%@", ps);
path = [document stringByAppendingPathComponent:@"bigPsArr"];
BigPerson *bigPerson1 = [[BigPerson alloc] init];
bigPerson1.name = @"小明";
bigPerson1.age = 20;
bigPerson1.sex = YES;
bigPerson1.nikeNameArr = @[@"xiaoming1", @"xiaoming2", @"xiaoming3"];
BigPerson *bigPerson2 = [[BigPerson alloc] init];
bigPerson2.name = @"小红";
bigPerson2.age = 25;
bigPerson2.sex = NO;
bigPerson2.nikeNameArr = @[@"xiaohong1", @"xiaohong2", @"xiaohong3"];
NSArray *bigPsArr = @[bigPerson1, bigPerson2];
NSLog(@"%d", [NSKeyedArchiver archiveRootObject:bigPsArr toFile:path]);
NSArray *psArr = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
for (BigPerson *ps in psArr) {
NSLog(@"%@", ps);
}
}