iOS培训日记——归档

2015年12月20日


#import "Person.h"

#define path @"/users/wayh/desktop"//目录名不区分大小写

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSDictionary * dic = [[NSDictionary alloc] initWithObjectsAndKeys: @"One", @"1", @"Two", @"2", @"Three", @"3", nil];//初始化字典
        [dic writeToFile:[NSString stringWithFormat:@"%@/dic.plist",path] atomically:YES];//返回值为BOOL;如果目录不存在则创建不成功
        
        NSDictionary * dic2 = [NSDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat: @"%@/dic.plist", path]];//ContentsOfFlie 通过文件的绝对路径拿到该文件的内容,并转换成对应的数据结构;如果路径正确则返回内容,否则返回null
        
        NSString *rootPath = NSHomeDirectory();//获取当前app(在手机中)的根目录
        NSFileManager *manager = [NSFileManager defaultManager];
        [manager contentsOfDirectoryAtPath:rootPath error:nil];//读取rootPath目录下文件和文件夹
        
        NSDictionary * dic3 = [NSDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat: @"/guidang/dic.plist"]];
        
        NSString * route = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES)[0];//取得沙盒中的目录集合;参数1:目录,参数2:用户的使用规格,参数3:YES;并取集合的第1项得到对应目录
        //???第2项以后又是什么?
        
        Person * person1 = [[Person alloc]init];
        person1.name = @"Jason";
        person1.age  = 28;
        
#pragma mark 自定义方法归档解档
        //归档管理者
        NSData * data = [NSKeyedArchiver archivedDataWithRootObject: person1];//将对象压缩成二进制数据
        [data writeToFile:[NSString stringWithFormat:@"%@/dic.zip",path] atomically:YES];//写入文件
        //解档管理者
        NSData * uData = [NSData dataWithContentsOfFile:[NSString stringWithFormat:@"%@/dic.zip",path]];//获取文件内容
        Person * p = [NSKeyedUnarchiver unarchiveObjectWithData:uData];//将数据解压成对象,用原数据类型来接

#pragma mark 系统自带库归档解档
        NSUserDefaults * ud = [NSUserDefaults standardUserDefaults];//系统自带的小型数据库,使用自定义类时需要引用<NSCoding>及方法
        [ud setObject:data forKey:@"personData"];//存入数据,并指定键值
        [ud synchronize];//同步更新
        
        NSData * gData = [[NSUserDefaults standardUserDefaults] objectForKey:@"personData"];//对应键值获取文件内容
        Person * pp = [NSKeyedUnarchiver unarchiveObjectWithData:gData];
    }
    return 0;
}


模型:

@interface Person : NSObject <NSCoding>//遵循NScodiing的协议,并要遵循协议都方法

@property (nonatomic , copy) NSString *name;
@property (nonatomic , assign) NSInteger age;

@end

@implementation Person

//以下两种方法均为NSCoding协议方法
- (void) encodeWithCoder : (NSCoder *) aCoder//对自定义类进行归档
{
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeInteger:self.age forKey:@"age"];
}
- (id) initWithCoder : (NSCoder *) aDecoder//对自定义类进行解档
{
    if (self = [super init])
    {
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeIntegerForKey:@"age"];
    }
    return self;
}

@end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值