Object-c Archiving归档

来源:互联网 发布:星图数据监测 编辑:程序博客网 时间:2024/04/30 18:04
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(@"文件不存在");


        }


3.自定义归档

0 0
原创粉丝点击