我们都知道,如果在OC中要实现存档和读取,可以使用c或者oc.但是如果成员是oc的类成员的话,那使用
NSCoding 进行存档和取档就相对简单一点.
1.下面我们就讲述下NSCoding协议
一般来说,NSCoding协议在 定义类的方法中实现.
如,Person.h,Student.h中声明
-(void)encodeWithCoder:(NSCoder *)aCoder //对类中的属性进行编码,又叫序列化.
{
[aCoder encodeInt:stuID forKey:@"id"];
[aCoder encodeObject:name forKey:@"name"];
[aCoder encodeInt:age forKey:@"age"];
[aCoder encodeInt:score forKey:@"score"];
}
-(id)initWithCoder:(NSCoder *)aDecoder //首先调用父类的init方法,然后按照key对属性进行解码,又叫反序列化.
{
if (self = [super init]) {
self.stuID = [aDecoder decodeIntForKey:@"id"];
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeIntForKey:@"age"];
self.score = [aDecoder decodeIntForKey:@"score"];
}
return self;
}
//1)写入文件
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:studentArray ]; //studentArray 是一个 array类型的,但是该位置要求的类型是id//,所以说我们可以使用很多类型编码成 NSData类型.然后就是文件的写入了.
[data writeToFile:filepath atomically:YES];
//2)读文件
NSMutableData *Data = [NSMutableData dataWithContentsOfFile:filepath]; //从文件中读出NSData.
self.studentArray = [NSKeyedUnarchiver unarchiveObjectWithData:Data];//解冻,或者说是解码,反序列化.