如何把对象存入本地

利用NSKeyedArchiver把对象存入本地

当你想把一个对象保存到本地的时候需要做以下几点:
1.使其遵循NSCoding协议。NSCoding 是一个简单的协议,遵循NSCoding协议的类可以被序列化和反序列化,
2.复写 encodeWithCoder:aCoder 方法,该方法告诉系统,如何将对象的属性进行编码。
3.复写 initWithCoder:aDecoder 方法,注意如果父类非NSObject,建议super一下.
4.在需要保存对象的地方执行NSKeyedArchiver的archiveRootObject方法即可。
示例伪代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
_propertyName1 = [aDecoder decodeObjectForKey:@"propertyName1"];
_propertyName2 = [aDecoder decodeObjectForKey:@"propertyName2"];
_propertyName3 = [aDecoder decodeObjectForKey:@"propertyName3"];
_propertyName4 = [aDecoder decodeObjectForKey:@"propertyName4"];
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:_propertyName1 forKey:@"propertyName1"];
[aCoder encodeObject:_propertyName2 forKey:@"propertyName2"];
[aCoder encodeObject:_propertyName3 forKey:@"propertyName3"];
[aCoder encodeObject:_propertyName4 forKey:@"propertyName4"];
}

1
2
3
4
5
6
7
NSString *homeDictionary = NSHomeDirectory();//获取根目录
NSString *homePath = [homeDictionary stringByAppendingPathComponent:@"testModel.arch"];//添加储存的文件名
if ([NSKeyedArchiver archiveRootObject:model toFile:homePath]) {
NSLog(@"archive success");
}else{
NSLog(@"failed");
}

当需要获取保存的对象时,调用NSKeyedUnarchiver的unarchiveObjectWithFile:方法来获取。
示例伪代码如下:

1
TestModel *unArchive = [NSKeyedUnarchiver unarchiveObjectWithFile:homePath];

显示评论