我们在使用APP时常用的一个功能:用户第一次进入APP时自动进入登录注册页,提示用户注册登录,用户登录成功后才进入主页,再次进入APP时,不用再次登录就直接进到主页了,就算杀掉该APP进程再次进入,依然进入主页.       
苹果给我们iOS开发者提供了一个NSUserDefault类,用来持久化存储用户的登录信息,只有卸载APP才能抹掉这些登陆信息.

1.在登陆页面对应的类loginViewController.h中定义两个TextField和一个Button,用来接受用户输入的用户名和密码,点击按钮登陆,如果登陆成功,就将用户的登陆信息存放在UserDefault中,然后跳入主页面

2.在loginViewController.m中实现两个TextField和一个Button,UI方面的代码就不粘贴了,直接实现按钮的点击登录事件:登录请求成功后,走成功回调,回调下面实现将用户名和密码存入UserDefault中,页面跳转到主页面.下面数据请求的代码就不粘贴了,直接上存储UserDefault代码,跳转主页面.ps:#import "AppDelegate.h"

 
3.在AppDelegate.h中实现:用户第一次进入APP时自动进入登录注册页,提示用户注册登录,用户登录成功后才进入主页,再次进入APP时,不用再次登录就直接进到主页了.
 
补充说明:如果你的登录页是自定义的导航栏,跳转登录页做此修改
 

4.执行完登录操作后,给“username”字段赋一个非空值,这样下次到AppDelegate时,判断之后就会进入到主页了

5.最后,该如何移除自动登录这种状态呢,或者切换用户登录.在你的退出登录按钮事件中实现.

6.好了,保存登录状态,移除等操作的都已经实现了.
 
 
 
 
 
//用户登录信息key
#define kUserInfoKey @"userInfoKey"
//用户登录信息密码
//#define kUserPwdKey @"userPwdKey" 、
[MBProgressHUD showSuccess:@"登录成功" toView:self.view];
[[NSUserDefaults standardUserDefaults] setObject:self.phoneNumTF.text forKey:kUserInfoKey];//保存登录用户名
// [[NSUserDefaults standardUserDefaults] setObject:self.pwdTF.text forKey:kUserPwdKey];//保存密码 、
[MBProgressHUD showSuccess:@"注册成功" toView:self.view];
[[NSUserDefaults standardUserDefaults] setObject:self.phoneTF.text forKey:kUserInfoKey];
// [[NSUserDefaults standardUserDefaults] setObject:self.pwdTF.text forKey:kUserPwdKey]; 、
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { SDLoginViewController *login = [[SDLoginViewController alloc] init];
SDNavigationController *nav = [[SDNavigationController alloc] initWithRootViewController:login];
self.window.rootViewController = nav;
NSString *userPhone = [[NSUserDefaults standardUserDefaults] objectForKey:kUserInfoKey];
// NSString *userPwd = [[NSUserDefaults standardUserDefaults] objectForKey:kUserPwdKey];
login.userLoginName = userPhone;
// login.userPwdTF = userPwd; } 、
#import "SDLoginViewController.h" if (self.userLoginName.length == ) {
self.phoneNumTF.placeholder = @"手机号/用户名/邮箱";
[self.phoneNumTF setValue:[UIColor colorWithHexString:@"#A7A7A7"] forKeyPath:@"_placeholderLabel.textColor"];
} else {
self.phoneNumTF.text = self.userLoginName;
}
if (self.userPwdTF.length == ) {
self.pwdTF.placeholder = @"密码";
[self.pwdTF setValue:[UIColor colorWithHexString:@"#A7A7A7"] forKeyPath:@"_placeholderLabel.textColor"];
} else {
self.pwdTF.text = self.userPwdTF;
}

iOS - 记住用户登录状态保存用户名密码的更多相关文章

  1. Django 用Session和Cookie分别实现记住用户登录状态

    简介 由于http协议的请求是无状态的.故为了让用户在浏览器中再次访问该服务端时,他的登录状态能够保留(也可翻译为该用户访问这个服务端其他网页时不需再重复进行用户认证).我们可以采用Cookie或Se ...

  2. iOS开发之记录用户登录状态

    iOS开发之记录用户登录状态 我们知道:CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreData还是蛮好用的.今天要说的是如何记录我们用户的登陆状态.例如微信 ...

  3. Asp.Net MVC记住用户登录信息 下次登录无需输入密码

    有的时候做网站,就需要记住用户登录信息,下次再登录网站时,不用重复输入用户名和密码,原理是浏览器的cookie把状态给记住了! 那么具体是怎么实现的呢?下面博主将一部分代码贴出来,想要完整版的Demo ...

  4. Asp.Net使用加密cookie代替session验证用户登录状态 源码分享

    首先 session 和 cache 拥有各自的优势而存在.  他们的优劣就不在这里讨论了. 本实例仅存储用户id于用户名,对于多级权限的架构,可以自行修改增加权限字段   本实例采用vs2010编写 ...

  5. 基于cookie的用户登录状态管理

    cookie是什么 先来花5分钟看完这篇文章:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies 看完上文,相信大家对cookie已经有 ...

  6. (转)TortoiseGit(乌龟git)保存用户名密码的方法

    返回博客列表 转 TortoiseGit(乌龟git)保存用户名密码的方法 元谷 发布时间: 2014/05/03 23:07 阅读: 20529 收藏: 21 点赞: 12 评论: 3 window ...

  7. tortoiseGIT保存用户名密码

    虽然GIT可以使用SSH来免去输入用户名密码的麻烦,但是更多的人我相信还是比较喜欢使用tortoiseGIT. 使用HTTP模式的代码库可以通过保存用户名密码的方式来免去重复输入的麻烦. 首先安装gi ...

  8. vue用户登录状态判断

    之前项目中用来判断是否登录我写了多种方案,但是最终只有一个方案是比较好的,这篇博客就是分享该方案; 先说基本要求: 项目中的登录状态是依据服务器里的状态来作为判断依据; 每一个需要登录后才能操作的接口 ...

  9. C# MVC 用户登录状态判断 【C#】list 去重(转载) js 日期格式转换(转载) C#日期转换(转载) Nullable<System.DateTime>日期格式转换 (转载) Asp.Net MVC中Action跳转(转载)

    C# MVC 用户登录状态判断   来源:https://www.cnblogs.com/cherryzhou/p/4978342.html 在Filters文件夹下添加一个类Authenticati ...

随机推荐

  1. python 生成动态密码

    import stringimport randomdef gen_psd(length=10): """length is password length"& ...

  2. mysql [索引优化] -- in or替换为union all

    一个文章库,里面有两个表:category和article.category里面有10条分类数据.article里面有 20万条.article里面有一个"article_category& ...

  3. wireshark解析自定义的protobuf协议

    先看最终效果 wireshark是开源的,而且在Windows下安装时用的是64位,所以相应的库文件需要使用64位. 一个Lua插件的Dissector结构大致如下: do -- 协议名称为 m_Me ...

  4. 深度残差网络(DRN)ResNet网络原理

    一说起“深度学习”,自然就联想到它非常显著的特点“深.深.深”(重要的事说三遍),通过很深层次的网络实现准确率非常高的图像识别.语音识别等能力.因此,我们自然很容易就想到:深的网络一般会比浅的网络效果 ...

  5. ValueError: output parameter for reduction operation logical_and has too many dimensions ?

    https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.all.html#numpy.all 运行示例,却发生错误 import ...

  6. 转 信号量与PV操作

    在计算机操作系统中,PV操作是进程管理中的难点.首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:    P(S):①将信号量S的 ...

  7. Java 基础【18】 反射与内省

    1.概念定义 Java 反射机制(Reflect)容许程序在运行时加载.探知.使用编译期间完全未知的 class,核心类 java.lang.Class. 通过把指定类中各种元素映射成 java.la ...

  8. py3下怎么用StringIO

    try: from StringIO import StringIO except ImportError: from io import StringIO

  9. 一目了然了解JAVA集合体系

    在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的一个很好的选择,前提是我们事先已经明确知道我们将要保存的对象的数量.一旦在数组初始化时指定了这个数组长度,这个数组长度就是不可变的,如果 ...

  10. ComputeShader中Consume与AppendStructuredBuffer的使用

    上个月写了一篇使用像素shader返回累加信息的Trick:https://www.cnblogs.com/hont/p/9977401.html 后来无意中发现DX11/Compute shader ...