iOS开发数据存储之NSKeyedArchiver

忘记出自哪里了:
如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,可以直接用NSKeyedArchiver进行归档和恢复
不是所有的对象都可以直接用这种方法进行归档,只有遵守了NSCoding协议的对象才可以
NSCoding协议有2个方法:
encodeWithCoder:
每次归档对象时,都会调用这个方法。一般在这个方法里面指定如何归档对象中的每个实例变量,可以使用encodeObject:forKey:方法归档实例变量

initWithCoder:
每次从文件中恢复(解码)对象时,都会调用这个方法。一般在这个方法里面指定如何解码文件中的数据为对象的实例变量,可以使用decodeObject:forKey方法解码实例变量

归档系统自带类:

NSArray * array = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
NSString * path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString * filePath = [path stringByAppendingPathComponent:@"bbb.xx"];
[NSKeyedArchiver archiveRootObject:array toFile:filePath];
    
NSArray * arrays = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
NSLog(@"dict = %@",arrays);

归档自定义类:

Others * others = [[Others alloc] init];
others.name = @"小明";
others.age = @"20";
    
NSString * parh = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString * filePath = [parh stringByAppendingPathComponent:@"cccc.xxx"];
[NSKeyedArchiver archiveRootObject:others toFile:filePath];
    
Others * other = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
NSLog(@"name = %@, age = %@",other.name,others.age);

Other.h

#import 

@interface Others : NSObject

@property (strong , nonatomic) NSString * name;
@property (strong , nonatomic) NSString * age;

@end

Other.m

#import "Others.h"

//NSKeyedArchiver归档如果想将一个自定义对象保存到文件中必须实现NSCoding协议
@interface Others ()

@end

@implementation Others

//当从文件中读取一个对象的时候就会调用该方法
//也在该方法中说明如何读取储存在文件中的对象
- (instancetype)initWithCoder:(NSCoder *)coder
{
    self = [super init];
    if (self) {
        self.name = [coder decodeObjectForKey:@"name"];
        self.age = [coder decodeObjectForKey:@"age"];
    }
    return self;
}

//将一个自定义对象保存到文件的时候就会调用该方法
//也在该方法中说明如何储存自定义对象的属性
-(void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeObject:self.age forKey:@"age"];
}

@end

你可能感兴趣的:(iOS开发数据存储之NSKeyedArchiver)