关于iOS中的NSUserDefaults系统隐藏目录

来源:互联网 发布:数据分析师培训机构 编辑:程序博客网 时间:2024/05/09 10:36

1.NSUserDefaults  含义:

NSUserDefaults(系统隐藏目录)用于永久保存数据,是一个单例,在程序项目中只有一个实例对象,适合存储轻量级的本地数据(如:用户名、密码等)。



2.NSUserDefaults  支持的数据类型:

NSNumber、NSString、NSDate、NSArray、NSDictionary、BOOL



3.NSUserDefaults  使用:

    NSDictionary*account =@{@"userName":@"wz",@"password":@"123456"};
   NSInteger index = [[NSUserDefaults standardUserDefaults] integerForKey:@"firstLogin"]; 
    //取对应字段的值
    [[NSUserDefaultsstandardUserDefaults]setInteger:index +1forKey:@"firstLogin"];
    //存储第一次登陆状态
   if(index == 0){
       
NSLog(@"写入账号和密码");
        [[
NSUserDefaults standardUserDefaults] setObject:account forKey:@"account"]; 
        //存储账号密码
    }
   
if(index >0){
       
NSDictionary *account1 = [[NSUserDefaults standardUserDefaults] objectForKey:@"account"];
       
NSLog(@"账号和密码为%@",account1);
    }

代码中首先判断是否第一个登录,若第一次就写入userName(用户名)和password(密码),存储用户名密码;第二次登录时,本地已经存储用户名和密码,就可打印出用户名和密码。


[[NSUserDefaults standardUserDefaults] setObject:account forKey:@"account"]; //存储为本地数据


NSDictionary *account1 = [[NSUserDefaults standardUserDefaults] objectForKey:@"account"]; //取出存储的数据




注意:

Key相同会覆盖已有原有Key,必须保证Key的唯一。


NSUserDefaults存储的对象是不可变的。


自定义对象,不能直接归档。




4.NSUserDefaults  存储自定义对象:


自定义的对象可选择归档,把对象放进字典,压缩解码。


自定义对象归档方法:支持NSCoding协议,用协议的两个方法进行编码解码,然后用NSKeyedArchiver写入沙盒文件,用NSKeyedUnarchiver读取文件。


例:
将自定义的对象归档存入:

    @interfaceUser : NSObject<NSCoding>//加入协议,实现对象归档
    @property (nonatomic,strong) NSString *userName;
    @property (nonatomic,strong) NSString *password;
    @end



    - (void)encodeWithCoder:(NSCoder*)aCoder{ //编码
    [aCoder
encodeObject:self.userNameforKey:@"userName"];
    [aCoder
encodeObject:self.passwordforKey:@"password"];
  }
  - (
nullable instancetype)initWithCoder:(NSCoder*)aDecoder{ //解码
   
self = [superinit];
   
self.userName= [aDecoder decodeObjectForKey:@"userName"];
   
self.password= [aDecoder decodeObjectForKey:@"password"];//写在协议中,做了简单的封装
   
return self;
   }



将自定义的对象取出:

   User*user = [[Useralloc]init];
    [NSKeyedArchiverarchiveRootObject:usertoFile:@""];//从文件读取对象,取出来就是一个对象





0 0