如果我们有一个界面有很多请求,但这时候所有的请求都无效,这是我们可能会提示用户 “请求失败”,“请求超时“等等,
如果提示一次那当然很好,但是每一个失败的请求都触发一次提示框来提示用户,这样会很糟糕。
可能一次弹出很多提示框,我们点击一次然后又弹出另一个,并且这些提示信息还是一样的,这样会让用户很恼火的。
假设某家公司有两个不同的数据库A 和B,但是A是内网的,B是现网的,我们在A中注册下,然后把信息保存,这时候我们修改地址指向B,可能会出现问题。
如果我们访问了需要提供access token 的资源,我们需要提供access token ,但是这个access token 在A中是有效的,在B中是无效的。
所以服务端可能会返回 “无效的access token”等。
可是我们已经登陆了啊,咋办呢?
我们可以根据具体的情况,重新弹出登陆界面,当然这只是一个例子,我们可以用这样的方法处理其他类似的情况。
1 用dispatch once
这个不说了
2 用工厂类方法
#import <UIKit/UIKit.h>
@inte易做图ce PresentLogInVC : UIViewController
+(void)appearLogInVC;
@end
#import "PresentLogInVC.h"
static UINavigationController *_navController;
static PresentLogInVC *_viewController;
@inte易做图ce PresentLogInVC ()
{
}
@end
@implementation PresentLogInVC
+(void)appearLogInVC
{
if (!_navController)
{
_viewController=[[self alloc]init];
_navController=[[UINavigationController alloc]initWithRootViewController:_viewController];
[_viewController show];
}
else
{
NSLog(@"have appeared !!!");
}
}
-(void)show
{
UIWindow *window=[[[UIApplication sharedApplication] windows] objectAtIndex:0];
[window addSubview: _navController.view];
__block CGRect r=[[UIScreen mainScreen]bounds];
r.origin.y=r.size.height;
[_navController.view setFrame:r];
[UIView animateWithDuration:0.3 animations:^{
r.origin.y=0; www.zzzyk.com
[_navController.view setFrame:r];
}];
}
-(void)dismiss
{
[UIView animateWithDuration:0.3 animations:^{
CGRect r=[[UIScreen mainScreen]bounds];
r.origin.y=r.size.height;
[_navController.view setFrame:r];
} completion:^(BOOL b){
[_navController.view removeFromSuperview];
}];
}
-(void)viewDidLoad
{
[super viewDidLoad];
self.title=@"登陆";
UIBarButtonItem * leftItem = [[UIBarButtonItem alloc] initWithTitle:@"dismiss" style:UIBarButtonItemStyleDone target:self action:@selector(dismiss)];
[self.navigationItem setLeftBarButtonItem:leftItem];
self.view.backgroundColor=[UIColor grayColor];
}
-(void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
[_navController release];
_navController=nil;
[_viewController release];
_viewController =nil;
}
@end