归档

把需要保存的对象转换成NSData,然后存在本地
等下次需要使用的时候,再解归档,就可以使用了

第一种方法(存一个)
-(void)fun1
{
    NSString *str = @“成本价”;
    //归档
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:str];
    //存本地
    [data writeToFile:@“/Users/qianfeng/Desktop/aaa” atomically:NO];
    //从本地读取
    data = [NSData dataWithContentsOfFile:@“/Users/qianfeng/Desktop/aaa”];
    //拿到对象
    NSString *newStr = [NSKeyedUnarchvier unarchiverObjectWithData:data];
    NSLog(@“%@“,newStr);
}

第二种方法(存多个)
-(void)fun2
{
    NSString *str1 = @“独孤求败”;
    NSString *str2 = @“东方不败”;
    // str1 + str2 = data
    NSMutableData *data = [NSMutableData data];
    //把归档的对象都放在data里
    NSKeyedArchiver *archiver = [NSKeyedArchiver alloc] initForWritingMutableData:data];
    [archiver encodeObject:str1 forKey:@“str1”];
    [archiver encodeObject:str2 forKey:@“str2”];
    [archiver finishEncoding];
    
    //拿出对象
    NSkeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
    NSString *newStr1  = [unarchvier decodeObjectForKey:@“str1”];
    NSString *newStr2 = [unarchiver decodeObjectForKey:@“str2”];
    NSLog(@“%@,%@“,newStr1,newStr2);
    
}
第三种(存自定义类对象)
首先,自定义类.h
//想让自定义的类支持归档,需要添加NSCoding协议
@interface userItem:NSObject<NSCoding>

@property(nonatomic,copy)NSString *name;

@end

然后,自定义类.m
@implementation userItem
//外界不能直接归档userItem,首先userItem需要先把自己的所有属性依次归档,然后外界再对userItem进行归档
-(id)initWithCoder:(NSCoder *)aDecoder
{
    self.name = [aDecoder decodeObjectForKey:@“name”];
    return self;
}

-(void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.name forKey:@“name”];
}

@end

最后归档,解档操作和第二种方法类似
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值