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它来创建一个实例。

  • 相关阅读:
    应用程序是否能控制SDK的P2P连接?
    如何使用流媒体数据代理功能?
    怎么样设置AnyChat视频质量?
    AnyChat在打开音频设备的同时会自动发布视频数据吗?
    单层感知器--matlab神经网络
    Django Day1
    云知声Java实习面试(offer到手含面试经验及答案)
    第四范式Java实习面试(offer到手含面试经验及答案)
    悦畅科技Java实习面试(offer到手含面试经验及答案)
    花椒直播Java实习面试(offer到手含面试经验及答案)
  • 原文地址:https://www.cnblogs.com/endtel/p/4828882.html
Copyright © 2011-2022 走看看