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

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

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;


}

你可能感兴趣的:(ios)