zoukankan      html  css  js  c++  java
  • 利用NSUserDefaults实现小型数据的快速存取

    一、使用理由:存取数据单一,小;代码简洁。

    1、NSUserDefaults数据存储的位置

       NSUserDefaults用于保存iPhone程序的数据,使用非常方便。
       那么这些数据最终存放在什么地方呢?存放于一个plist文件中。
       这个文件位于<UUID for your App>LibraryPreferences<your App"s bundle ID>.plist

    2、支持存取的数据类型
       NSUserDefaults只支持: NSString, NSNumber, NSDate, NSArray, NSDictionary.

    3、取
       例如:
    Objective-c代码 
    //读取和保存用户使用软件次数   
    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];   
    NSNumber* count = [ud objectForKey:@"times"];


    4、存

       接上例:
    Objective-c代码 
    int t = [count intValue]+1;   
    [ud setObject:[NSNumber numberWithInt:t] forKey:@"times"]; 

    二、NSUserDefaults可以存取一些短小的信息。

    1、NSUserDefaults数据存储的位置

    NSUserDefaults用于保存iPhone程序的数据,使用非常方便。
    那么这些数据最终存放在什么地方呢?存放于一个plist文件中。这个文件位于
    <UUID for your App>\Library\Preferences\<your App"s bundle ID>.plist

    2、得到用户的首选语言
    //得到用户缺省值
    NSUserDefaults* defs = [NSUserDefaults standardUserDefautls];
    //在缺省值中找到AppleLanguages, 返回值是一个数组
    NSArray* languages = [defs objectForKey:@"AppleLanguages"];
    //在得到的数组中的第一个项就是用户的首选语言了
    NSString* preferredLang = [languages objectAtIndex:0];

    3、比如存入再读出一个字符串到NSUserDefaults:

    NSString *string = [NSString stringWithString @"hahaha"];
    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
    [ud setObject:string forKey:@"myKey"]; 
    NSString *value;
    value = [ud objectForKey:"myKey"];  
     

    但是并不是所有的东西都能往里放的。NSUserDefaults只支持: NSString, NSNumber, NSDate, NSArray, NSDictionary.

    三、NSUserDefaults的使用

    1、创建一个user defaults方法有多个,最简单得快速创建方法:
    NSUserDefaults *accountDefaults = [NSUserDefaults standardUserDefaults];

    2、添加数据到 user defaults:
    [accountDefaults setObject:nameField.text forKey:UserDefaultNameKey];

    也可以添加基本数据类型int, float, bool等,有相应得方法
    [accountDefaults setBool:YES forKey:UserDefaultBoolKey];

    3、从user defaults中获取数据:
    [accountDefaults objectForKey:NCUserDefaultNameKey]

    [accountDefaults boolForKey: UserDefaultBoolKey];


    要点: NSUserDefaults非常好用,并不需要用户在程序中设置NSUserDefaults的全局变量,需要在哪里使用NSUserDefaults的数据,那么就在哪里创建一个NSUserDefaults对象,然后进行读或者写操作。

         针对同一个关键字对应的对象或者数据,可以对它进行重写,重写之后关键字就对应新的对象或者数据,旧的对象或者数据会被自动清理。

    以下是一个我自己写的例子,通过checkBtn按钮进行保存用户名和密码:

    NSUserDefaults的使用 - 木木 - 木木的博客

    图片一:保存数据之前;或者上一次没有保存数据,第二次启动的界面


    NSUserDefaults的使用 - 木木 - 木木的博客
    图片二:保存了数据,第二次打开所看到的启动初始界面
     

    - (void)defaultCheck:(id)sender

    {   

    NSLog(@" check按钮被按下   ");

    NSUserDefaults *accountDefaults = [NSUserDefaults standardUserDefaults];

    if ([accountDefaults boolForKey:NCUserDefaultBoolForRegister] == NO)

    {

    ((UIButton*)sender).selected = YES;

    [accountDefaults setBool:YES forKey:NCUserDefaultBoolForRegister];

    [accountDefaults setObject:nameField.text forKey:NCUserDefaultNameKey];

    [accountDefaults setObject:pwdField.text forKey:NCUserDefaultPasswordKey];

    }

    else {//YES

    ((UIButton*)sender).selected = NO;

    [accountDefaults setBool:NO forKey:NCUserDefaultBoolForRegister];

    [accountDefaults setObject:nil forKey:NCUserDefaultNameKey];

    [accountDefaults setObject:nil forKey:NCUserDefaultPasswordKey];

    }

    }

    - (void)loadView {

    [super loadView];

    nameField = [[UITextField alloc]initWithFrame:CGRectMake(0, 0, 100, 30)];

    pwdField = [[UITextField alloc]initWithFrame:CGRectMake(0, 0, 100, 30)];

    [nameField setCenter:CGPointMake(160, 100)];

    [pwdField setCenter:CGPointMake(160, 150)];

    NSUserDefaults *accountDefaults = [NSUserDefaults standardUserDefaults];

    //存的是bool值一定要用boolForKey:获取

    //如果之前已经保存了User Defaults,那么在读取的时候就要将数据读取出来,显示在用户名和密码框中(这里没有加密)。

    if ([accountDefaults boolForKey:NCUserDefaultBoolForRegister] == YES) {

    nameField.text = [accountDefaults objectForKey:NCUserDefaultNameKey];

    pwdField.text = [accountDefaults objectForKey:NCUserDefaultPasswordKey];

    }

    else

    {

       [nameField setPlaceholder:@"用户名"];

           [pwdField setPlaceholder:@"密码"];

    }

    nameField.borderStyle = UITextBorderStyleBezel;

    [pwdField setBorderStyle:UITextBorderStyleRoundedRect];

    [self.view addSubview:nameField];

    [self.view addSubview:pwdField];

    UIButton * loginBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    [loginBtn setFrame:CGRectMake(0, 0, 50, 30)];

    [loginBtn setCenter:CGPointMake(200, 200)];

    [loginBtn addTarget:self action:@selector(loginToWeiBo:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:loginBtn];

    UIButton * checkBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    [checkBtn setFrame:CGRectMake(0, 0, 20, 20)];

    [checkBtn setCenter:CGPointMake(160, 180)];

    //选中之后得图标

    [checkBtn setBackgroundImage:[UIImage imageNamed:@"lock.png"] forState:(UIControlState)UIControlStateHighlighted];

    [checkBtn setBackgroundImage:[UIImage imageNamed:@"lock.png"] forState:(UIControlState)UIControlStateSelected];

        //未选中

    [checkBtn setBackgroundImage:[UIImage imageNamed:@"unlock.png"] forState:(UIControlState)UIControlStateNormal];

    [checkBtn addTarget:self action:@selector(defaultCheck:) forControlEvents:UIControlEventTouchUpInside];

    //用户名和密码已经保存

    if([accountDefaults boolForKey:NCUserDefaultBoolForRegister] == YES

    {

    [checkBtn setSelected:YES];

    }

    [self.view addSubview:Btn];

    }

  • 相关阅读:
    Appium+python自动化(三十九)-Appium自动化测试框架综合实践
    Mish:一个新的SOTA激活函数,ReLU的继任者
    [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息
    Windows环境下的TensorFlow安装过程
    深度学习必懂的13种概率分布
    LaTeX技巧96:LaTeX 图片控制命令,位置控制
    设置UniDbGrid的整行显示颜色,如果某字段值是我们的控制字段
    UniDBGrid增加显示记录数的label及隐藏refresh按钮
    unidbgrid 设置 单元格颜色
    给uniGUI的表格控件uniDBGrid加上记录序号的列
  • 原文地址:https://www.cnblogs.com/batys/p/2216107.html
Copyright © 2011-2022 走看看