iOS - 判断用户是否已经登陆

来源:互联网 发布:网络访问控制技术 编辑:程序博客网 时间:2024/05/30 05:00

下班在即 写写上班两个月的总结心得

1.每次打开一个项目,如果用户有过登陆则跳转主页,无用户则跳转登陆页,有无用户的判断,我的做法是,做一个用户单例(UserManager) 再做一个管理用户的工具 (UserManagerTool),利用用户管理工具,将用户归档,在程序的入口处,判断文件中的用户是否存在

1⃣️UserManager
全局用来存储用户的信息,在工程内可以任意调用
里面的主要的方法 只有KVC 键值配对

 在UserManager.h中
//创建用户管理单例+ (UserManager *)manager;+ (instancetype)userManagerWithDict:(NSDictionary *)dict;- (instancetype)initWithDict:(NSDictionary *)dict;

在UserManager.m中

+(UserManager *)manager {    static UserManager * _manager;    if (_manager == nil) {        _manager = [[UserManager alloc]init];        //_manager.status = NO;    }    return _manager;}+ (instancetype)userManagerWithDict:(NSDictionary *)dict{    return [[self alloc] initWithDict:dict];}- (instancetype)initWithDict:(NSDictionary *)dict{    if (self = [super init]) {//        [self setValuesForKeysWithDictionary:dict];        self.user_id = dict[@"user_id"];        self.user_name = dict[@"user_name"];    }    return self;}//归档解档用- (void)encodeWithCoder:(NSCoder *)encoder{    ;    [encoder encodeObject:self.user_id forKey:@"user_id"];    [encoder encodeObject:self.user_name forKey:@"user_name"];}- (instancetype)initWithCoder:(NSCoder *)decoder{    if (self = [super init]) {        self.user_id = [decoder decodeObjectForKey:@"user_id"];        self.user_name = [decoder decodeObjectForKey:@"user_name"];    }    return self;}

2⃣️UserManagerTool

UserManagerTool.h中的方法

#import <Foundation/Foundation.h>@class UserManager;@interface UserManagerTool : NSObject//保存用户到文件 (归档用户) 登陆成功后调用+ (void)saveUserManager:(UserManager *)userManager;//从档案中取出这个用户 + (UserManager *)userManager;//从档案文件中删除这个用户  登出后调用此方法+ (void)removeUserManager;@end
    UserManagerTool.m中的方法
#import "UserManagerTool.h"#define saveFilePath [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]  stringByAppendingPathComponent:@"userManager.data"]@implementation UserManagerTool+ (UserManager *)userManager{    return (UserManager *)[NSKeyedUnarchiver unarchiveObjectWithFile:saveFilePath];}+ (void)saveUserManager:(UserManager *)userManager{    [NSKeyedArchiver archiveRootObject:userManager toFile:saveFilePath];}+ (void)removeUserManager{    NSFileManager *mgr = [[NSFileManager alloc] init];    [mgr removeItemAtPath:saveFilePath error:nil];}@end
  1. 在Appdelegate.m中做判断
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    //根据归档是否有无userManager对象,选择不同的根控制器    UserManager *userManager = [UserManagerTool userManager];    if (userManager) {        NSLog(@"%@",userManager.token);        MainTabBarVC * tab = [[MainTabBarVC alloc]init];        MainNavgationVC * nav = [[MainNavgationVC alloc]initWithRootViewController:tab];        self.window.rootViewController = nav;    } else {        ViewController * vc = [[ViewController alloc]init];        MainNavgationVC * nav = [[MainNavgationVC alloc]initWithRootViewController:vc];        self.window.rootViewController = nav;    }    return YES;}
1 0
原创粉丝点击