下班在即 写写上班两个月的总结心得
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
- 在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;
}