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);
  • 相关阅读:
    嵌入式Linux驱动学习之路(十九)触摸屏驱动、tslib测试
    GNU make使用变量⑤变量的引用、定义等
    Java并发——核心理论
    Java并发——volatile的原理
    Java线程与Linux内核线程的映射关系
    Reactor模式详解
    Java实现二分查找算法
    Dubbo协议与连接控制
    linux 域名
    package报错
  • 原文地址:https://www.cnblogs.com/mohe/p/3784607.html
Copyright © 2011-2022 走看看