判断用户的登录状态
本文章来自于自己的项目 出现某些接口的请求必须登录才能进行,操作比较繁琐。所以想结束于某些类进行单独处理 。
由于项目中有相关的用户单利存在 ,就放到其中处理也是一个不错的额选择。代码比较简陋,勿怪。
.h 文件
-(BOOL)inspectLogin;
.m文件
#import "UserService.h"
#import "LoginAndRegisterViewController.h"
#import "AppDelegate.h"
static UserService *user;
@interface UserService () <UIActionSheetDelegate,UIAlertViewDelegate>{
UIAlertView *alertView;
}
//@property (nonatomic, strong) UIAlertView *alertView;
@end
@implementation UserService
//单利部分省略
-(BOOL)inspectLogin
{
if ([UserService sharedUserService].uid == nil ) {
alertView = [[UIAlertView alloc] initWithTitle:LocalizedString(pleaseWait) message:LocalizedString(unloginDDZ) delegate:self cancelButtonTitle:LocalizedString(cancelDDZ) otherButtonTitles:LocalizedString(sureDDZ), nil];
[UIView appearance].tintColor = RGBThemColor;
alertView.delegate = self;
[alertView show];
#warning 检验得出 这是对象方法(instance Method),不能放到类方法中(class method)
return NO;
}
return YES;
}
#pragma mark alertView 代理方法
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
LoginAndRegisterViewController * loginView = [[LoginAndRegisterViewController alloc] init];
if (buttonIndex==1) {
// [appDelegate.window presentViewController:_callController animated:YES completion:nil];
// [self. showViewController:loginView sender:nil];
// 觉得不应该暴露出来的 但其实说没有区别的
// AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
// UITabBarController *tabVC = appDelegate.tabbarVC ;
// 觉得不应该暴露出来的 但其实说没有区别的,此处就能获得当前的tabbar,不过得说明一下:APPDelegate的rootViewController是DZTabbarViewController(UITabBarController的子类)
NSArray *widows = [UIApplication sharedApplication].windows;
for (UIWindow *window in widows) {
if ([window.rootViewController isKindOfClass:NSClassFromString(@"DZTabbarViewController")]) {
// Class cla = NSClassFromString(@"DZTabbarViewController");
UITabBarController *tabVC = window.rootViewController;
UIViewController *vc = tabVC.selectedViewController;
[tabVC.selectedViewController pushViewController:loginView animated:YES
];
}
}
}
}
@end
/*
使用 在任何 需要处理用户的登录的情况就直接使用 如下语句即可 (必须引入相关的头文件才可以 ,我是放在prefix文件中的)
if (![[UserService sharedUserService] inspectLogin]) {
return;
}
不过还是有待提升的地方:
现在先做一个讨论:
1.在网络请求的接口进行 用户的登录就直接进行登录的处理,这样的话就可以省掉很多的麻烦。不过也必须得进行特殊的 处理,不然的话注册怎么办,而且这种操作更适用于必须进行登录操作需求的项目。
2.在其他的情况(排处登录的这样的重复度较高的情况),不知道有没有好的处理方案。如果也非得集成在一起的话,恐怕这个单例类的负担也会上升,判断也会增多,只单独处理登录这一个操作会比较简介轻松。
3.不过就是用来说已经很方便了,毕竟用户的登录情况需要我们来控制,而不是必须登录。
4.还要说明的alertview已经被放弃治疗了改用UIAlertController 同时替代了 UIAlertView 和 UIActionSheet,从系统层级上统一了 alert 的概念 —— 即以 modal 方式或 popover 方式展示。
*/