zoukankan      html  css  js  c++  java
  • NSUserDefault 保存自定义对象

     

    由于NSUserDefaults 不支持保存自定类,保存的对象需要实现NSCoding协议,不过自定的类型就算实现了NSCoding也不可以保存,可以通过以下方法实现:

    //h文件
    #import <Foundation/Foundation.h>
    
    @interface People : NSObject<NSCoding>
    
    @property(nonatomic,copy)NSString *name;
    @property(nonatomic,copy)NSString *age;
    
    @end
    
    //m文件
    
    #import "People.h"
    
    @implementation People
    
    - (void)encodeWithCoder:(NSCoder *)aCoder{
        [aCoder encodeObject:_name forKey:@"name"];
        [aCoder encodeObject:_age forKey:@"age"];
        
    }
    - (id)initWithCoder:(NSCoder *)aDecoder{
        _name= [aDecoder decodeObjectForKey:@"name"] ;
        _age= [aDecoder decodeIntegerForKey:@"age"];
        return self;
    }
    @end

    通过实现

    NSKeyedArchiver转换成NSData然后保存到NSUserDefaults中,然后取值的时候可以通过NSKeyedUnarchiver读NSData获得对应的user,代码如下:

    NSUserDefaults *userDefault= [NSUserDefaults standardUserDefaults];
        People *p = [[People alloc]init];
         p.name = @"张飞";
        p.age = @"32";
        //将对象转化为字节流
        NSData *data = [NSKeyedArchiver archivedDataWithRootObject: p];
        
        [userDefault setObject:data forKey:@"user"];
        //同步
        [nsuser synchronize];
    
        //获取
        NSData *getdata =[nsuser objectForKey:@"user"];
        //解码
        People *getP = [NSKeyedUnarchiver unarchiveObjectWithData:getdata];
      
        
        NSLog(@"%@",getP.name);
  • 相关阅读:
    NOIP 2016 提高组 复赛 Day2T1==洛谷2822 组合数问题
    Codevs 1710 == POJ 1190 生日蛋糕 == 洛谷P1731
    [网络流24题] COGS 750 栅格网络流
    [网络流24题] COGS 运输问题1
    狂K 线段树
    Graph coloring技能树
    智能体大赛酱油记
    graph coloring学习记录
    湖北省赛酱油记
    CCCC酱油记
  • 原文地址:https://www.cnblogs.com/mohe/p/3784607.html
Copyright © 2011-2022 走看看