前面讲了属性列表,这里继续讲ios数据持久化二之对象的解归档,以前博客也有讲到,能够查看;ios
二。对象解归档code
要使用对象归档,对象就必须遵照NSCoding协议,大部分OC对象都遵照NSCoding协议,也能够在自定义对象中实现该协议,要实现该协议,必须实现两个协议方法对象
- (void)encodeWithCoder:(NSCoder *)aCoderget
- (instancetype)initWithCoder:(NSCoder *)aDecoder;博客
这两个方法是必须实现的协议方法,若是不识闲那么将会报错,it
- (void)encodeWithCoder:(NSCoder *)aCoder{io
//这里必须是User类的属性(须要数据持久化操做的属性)file
[aCoder encoderObject:[NSNumber numberWithInteger:self.userId] forKey@"userId"];方法
[aCoder encoderObjectself.name forKey:@"name"];error
}
第二个方法:
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self == [super init]){
//这里的userId必须和第一方方法中的一直,不然仍是读取不到数据
self.userId = [[aDecoder decodeObjectForKey:@"userId"] integerValue];
self.name = [aDecoder decodeObjectForKey:@"name"];
}
return self;
}
最后怎么使用?
+(BOOL) save{
NSError *error = nil;
//肯定存储路劲,一半都是沙盒路径下的Document文件
NSString *fileName = [self getFileName];
NSString *filePath = [self getFilePath];
if(![[NSFileManager defaultManager] createDirectoryAtPath:filePath withIntermediateDirectories :YES attributes:nil err:&error]){
return NO;
}
return [NSKeyedArchiver archiveRootObject:self toFile:[fileName:userId]];
}