文件归档

//
//  main.m
//  OC5-文件归档
//
//  Created by qianfeng on 15/6/23.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import <Foundation/Foundation.h>
//归档:把对象数据存储到文件的过程.
//反归档:从文件中读取数据到对象中的过程.
int main(int argc, const char * argv[]) {
    @autoreleasepool {
#if 0
        //用系统方法归档
        //NSKeyedArchiver
        NSMutableDictionary *mutdic =[NSMutableDictionary dictionaryWithObjectsAndKeys:@"one",@"1",@"two",@"2", nil];
        [mutdic setValue:[NSDate date] forKey:@"date"];
        [mutdic setValue:[NSNumber numberWithInt:123] forKey:@"num"];
        [mutdic setValue:[@"ios" dataUsingEncoding:NSUTF8StringEncoding] forKey:@"data"];
        bool ret =[NSKeyedArchiver archiveRootObject:mutdic toFile:@"/Users/qianfeng/Desktop/text/arch.text"];//文件不存在自动创建.
        if(ret)
        {
            NSLog(@"文件归档成功");
            
        }
        else{
            NSLog(@"文件归档失败");
        }
//#else
        //反归档
        NSDictionary *dict =[NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/qianfeng/Desktop/text/arch.text"];
        if (dict) {
              NSLog(@"%@",dict);
        }
        
        
#endif
        
#if 1
        //归档
        
        NSMutableDictionary *mutdic =[NSMutableDictionary dictionaryWithObjectsAndKeys:@"one",@"1",@"two",@"2", nil];
        [mutdic setValue:[NSDate date] forKey:@"date"];
        [mutdic setValue:[NSNumber numberWithInt:123] forKey:@"num"];
        [mutdic setValue:[@"ios" dataUsingEncoding:NSUTF8StringEncoding] forKey:@"data"];
        NSData *data =[NSKeyedArchiver archivedDataWithRootObject:mutdic];
        //data =[NSKeyedArchiver archivedDataWithRootObject:mutdic];
        BOOL ret =[data writeToFile:@"/Users/qianfeng/Desktop/text/data.text" atomically:YES];
        
        if(ret)
        {
            NSLog(@"文件归档成功");
            
        }
        else{
            NSLog(@"文件归档失败");
        }
        
#else
      
        //反归档
        NSData *data =[NSData dataWithContentsOfFile:@"/Users/qianfeng/Desktop/text/data.text"];
        NSDictionary *dict =[NSKeyedUnarchiver unarchiveObjectWithData:data];
        if(dict)
        {
            NSLog(@"%@",dict);
        }
        
        
#endif
        
#if 0
        //手动归档
        //创建一个空的可变data对象
        NSMutableData *data =[NSMutableData data];//一定是可变的二进制对象(NSMutableData)
        NSKeyedArchiver *archiver =[[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
        NSArray *array =[NSArray arrayWithObjects:@"one",@"two",[NSNumber numberWithInt:123],[NSDate date],[@"ios" dataUsingEncoding:NSUTF8StringEncoding], nil];
        
        NSMutableDictionary *dict =[NSMutableDictionary dictionaryWithObjectsAndKeys:@"5",@"five",@"6",@"six",[NSNumber numberWithInt:123],@"num1",[NSNumber numberWithFloat:23.1],@"num2", nil];
        //对数组及字典进行编码
        [archiver encodeObject:array forKey:@"array"];
        [archiver encodeObject:dict forKey:@"dictionary"];
        
        //完成编码
        [archiver finishEncoding];
        
        //写入文件
       int ret=  [data writeToFile:@"/Users/qianfeng/Desktop/text/data.text" atomically:YES];
        if (ret) {
            NSLog(@"文件归档成功");
            
        }
        else{
            NSLog(@"文件归档失败");
        }
        
        
//#else
        //解归档
        NSData *data =[NSData dataWithContentsOfFile:@"/Users/qianfeng/Desktop/text/data.text"];
        NSKeyedUnarchiver *unarchiver =[[NSKeyedUnarchiver alloc] initForReadingWithData:data];
        NSArray *array =[unarchiver decodeObjectForKey:@"array"];
        NSDictionary *dict =[unarchiver decodeObjectForKey:@"dictionary"];
        //完成解码
        [unarchiver finishDecoding];
        
        NSLog(@"array =%@",array);
        NSLog(@"----------------");
        NSLog(@"dict =%@",dict);
        
#endif
    }
    return 0;
    
}
原文地址:https://www.cnblogs.com/0515offer/p/4595165.html