Object-c Archiving归档
1.系统对象
NSArray
NSDictionary
NSSet
NSNumber
因为系统自定义对象都实现了NSCoding接口
以NSArray为例,array没有赋值,为空
NSArray *array=[[NSArray alloc]init];
NSString *fileString=@”/Users/administrator/Desktop/arrayfile.plist”;
//array数组存储到目的路径fileString下
if ([array writeToFile:fileString atomically:YES]) {
NSLog(@”输出成功“);
}
else{
NSLog(@”输出错误“);
}
//用本地文件创建array1
NSFileManager *manager=[NSFileManager defaultManager];
//判断目标路径下是否有文件
if ([manager fileExistsAtPath:fileString]) {
NSArray *array1=[[NSArray alloc]initWithContentsOfFile:fileString];
NSLog(@”创建成功“);
}
else{
NSLog(@”创建失败“);
}
2.用户自定义类型
自定义类型要实现<NSCoding>协议
.h文件中
既要继承父类<NSObject>也要实现协议<NSCoding>
.m文件中
@synthesize name;
//编码
-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.name forKey:@”name”];
}
//解码
-(id)initWithCoder:(NSCoder *)aDecoder{
//对类的其他成员进行初始化
if (self=[super init]) {
self.name=[aDecoder decodeObjectForKey:@”name”];
}
return self;
}
//重写description能输出自定义对象成员(如果不重写 输出的是“<Stuff: 0x100201b30>”,)
//所属类的名称和该对象的首地址
-(NSString *)description{
return [NSString stringWithFormat:@”%@”,self.name];
}
main.m文件中
NSMutableArray *mutStuff=[[NSMutableArray alloc]initWithObjects:stuff,stuff1,stuff2,nil];
//数组写入文件 存储到本地上去
NSString *filString=@”/Users/administrator/Desktop/muStuff”;
if ([NSKeyedArchiver archiveRootObject:mutStuff toFile:filString]) {
NSLog(@”输出成功,已存储在本地目录上!“);
}
else{
NSLog(@”输出错误“);
}
//新建NSArray用本地文件
NSFileManager *manager=[NSFileManager defaultManager];
//判断目的文件路径下是否为空
if([manager fileExistsAtPath:filString]){
NSArray *Stuff=[NSKeyedUnarchiver unarchiveObjectWithFile:filString];
NSLog(@”读取本地文件:%@”,Stuff);
}
else{
NSLog(@”文件不存在“);
}