NSUserDefault 存储自定义对象

NSUserDefault 是用来存用户配置信息,可以用来临时存一些应用数据. 在应用不删除的情况下,会一直存在.如果key 相同则会覆盖.

基本用法:

    [[ NSUserDefaults standardUserDefaults ] setObject : @"testValue" forKey : @"test" ];
   NSLog(@"Test is %@", [[NSUserDefaultsstandardUserDefaults]objectForKey:@"test"]);


利用NSUserDefault 来存自定义对象:

因为NSUserDefault 只能储存基本数据类型,所以当我们自定义自己的类的时候 不用NSUserDefault 直接来储存. 此时需要实现NSCoding 协议,这个协议只是用来decode 和 encode 的(也就是转码/反转码). 通过 NSKeyedArchiver 和 NSKeyedUnArchiver 可以把NSData 与 类之间相互转换. 主要思想就是这样.
自定义类 h 文件

#import <Foundation/Foundation.h>

@interface Student : NSObject < NSCoding >
@property ( nonatomic , strong ) NSString *name;
@property ( nonatomic , strong ) NSString *text;

@end

自定义类 m 文件
#import "Student.h"

#define NAME @ "name"
#define TEXT @
"text"

@implementation Student

- (
void )encodeWithCoder:( NSCoder *)aCoder{
    [aCoder
encodeObject : self . name forKey : NAME ];
    [aCoder
encodeObject : self . text forKey : TEXT ];
}

- (
id )initWithCoder:( NSCoder *)decoder{
   
if ( self = [ super init ])
    {
       
if (decoder == nil )
        {
           
return self ;
        }
       
self . name = [decoder decodeObjectForKey : NAME ];
       
self . text = [decoder decodeObjectForKey : TEXT ];
    }
   
return self ;
}

@end

NSUserDefault 存储与读取

    Student *testStu = [[ Student alloc ] init ];
    testStu.
name = @"testname" ;
    testStu.
text = @"testtext" ;
   
   
NSData *data = [ NSKeyedArchiver archivedDataWithRootObject :testStu];
    [[
NSUserDefaults standardUserDefaults ] setObject :data forKey : @"student" ];
   
   
NSData *deData = [[ NSUserDefaults standardUserDefaults ] objectForKey : @"student" ];
   
Student *deStu = [ NSKeyedUnarchiver unarchiveObjectWithData :deData];
   
   NSLog(@"name is %@", deStu.name);

—完 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值