zoukankan      html  css  js  c++  java
  • NSUserDefaults保存用户名和密码

    #import "ViewController.h"
    
    @interface ViewController ()
    @property (weak, nonatomic) IBOutlet UITextField *nameTextField;
    @property (weak, nonatomic) IBOutlet UITextField *ageTextField;
    
    @end
    
    @implementation ViewController
    
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        //1.测试部分:获取沙盒的Library目录
        NSArray *libraryPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
        NSString *libraryPath = [libraryPaths lastObject];
        NSLog(@"libraryPath:%@",libraryPath);
        
        //2.初始化数据(从第四步保存的数据,读取它,并显示)
        [self initDataByUserDefault];
        
        //3.在用户将后台程序移除后,需要知道针对这个动作的触发时间/方法(通知)
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:[UIApplication sharedApplication]];
        
        //4.在后面
    }
    
    - (void)initDataByUserDefault{
        //获取全局的NSUserDefaults对象
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        //使用defaults对象来获取保存的数据
        NSString *nameStr = [defaults objectForKey:@"name"];
        NSString *ageStr = [defaults objectForKey:@"age"];
        //将上步获取的数据,赋值给nameTextField
        if (nameStr) {
            self.nameTextField.text = nameStr;
        }
        if (ageStr) {
            self.ageTextField.text = ageStr;
        }
      
        
    }
    
    - (void)applicationWillDidEnterBackground:(NSNotification *)notitication{
        NSLog(@"测试:进入后台时机");
        //4.在触发方法中去保存你要保存的数据。
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setObject:self.nameTextField.text forKey:@"name"];
        [defaults setObject:self.ageTextField.text forKey:@"age"];
        
        //强制将用户输入的名字和年龄数据保存到硬盘中
        //这里不是自己决定的,由系统决定 ,存在Library目录下。
        [defaults synchronize];
    }
    
    @end

     这段代码也可以根据自己的需要进行简化,比如说我是要在点击登录之后,触发保存UserDefault

    - (void)viewDidLoad {
        [super viewDidLoad];
        
        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
        NSString *name = [userDefaults objectForKey:@"user"];
        NSString *pwd = [userDefaults objectForKey:@"pwd"];
        if (name) {
            self.userName.text = name;
        }
        if (pwd) {
            self.passWord.text = pwd;
        }
    }
    
    - (IBAction)login:(id)sender {
        
        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
        [userDefaults setObject:self.userName.text forKey:@"user"];
        [userDefaults setObject:self.passWord.text forKey:@"pwd"];
       [userDefaults synchronize];
        BViewController *BVC = [[BViewController alloc] init];
        [self.navigationController pushViewController:BVC animated:YES];
    
    }

    NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名、密码之类的,个人觉得使用NSUserDefaults是首选。下次再登陆的时候就可以直接从NSUserDefaults里面读取上次登陆的信息咯。

    因为如果使用自己建立的plist文件什么的,还得自己显示创建文件,读取文件,很麻烦,而是用NSUserDefaults则不用管这些东西,就像读字符串一样,直接读取就可以了。

    NSUserDefaults支持的数据格式有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL类型。

    官方文档解释:

    The NSUserDefaults class provides convenience methods for accessing common types such as floats, doubles, integers, Booleans, and URLs. A default object must be a property list, that is, an instance of (or for collections a combination of instances of): NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary. If you want to store any other type of object, you should typically archive it to create an instance of NSData

    翻译:

    NSUserDefaults类提供了便利的方法来访问常见类型如浮点,双精度,整数,布尔和url。一个默认的对象必须是一个属性列表,也就是说,的一个实例(或集合的组合的实例):NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary。如果你想存储其他类型的对象,通常你应该存档NSData它来创建一个实例。

  • 相关阅读:
    LeetCode 189. Rotate Array
    LeetCode 965. Univalued Binary Tree
    LeetCode 111. Minimum Depth of Binary Tree
    LeetCode 104. Maximum Depth of Binary Tree
    Windows下MySQL的安装与配置
    LeetCode 58. Length of Last Word
    LeetCode 41. First Missing Positive
    LeetCode 283. Move Zeroes
    《蚂蚁金服11.11:支付宝和蚂蚁花呗的技术架构及实践》读后感
    删除docker下的镜像
  • 原文地址:https://www.cnblogs.com/endtel/p/4828882.html
Copyright © 2011-2022 走看看