如果我們有一個界面有很多請求,但這時候所有的請求都無效,這是我們可能會提示用戶 “請求失敗”,“請求超時“等等,
如果提示一次那當然很好,但是每一個失敗的請求都觸發一次提示框來提示用戶,這樣會很糟糕。
可能一次彈出很多提示框,我們點擊一次然後又彈出另一個,並且這些提示信息還是一樣的,這樣會讓用戶很惱火的。
假設某家公司有兩個不同的數據庫A 和B,但是A是內網的,B是現網的,我們在A中注冊下,然後把信息保存,這時候我們修改地址指向B,可能會出現問題。
如果我們訪問了需要提供access token 的資源,我們需要提供access token ,但是這個access token 在A中是有效的,在B中是無效的。
所以服務端可能會返回 “無效的access token”等。
可是我們已經登陸了啊,咋辦呢?
我們可以根據具體的情況,重新彈出登陸界面,當然這只是一個例子,我們可以用這樣的方法處理其他類似的情況。
1 用dispatch once
這個不說了
2 用工廠類方法
#import <UIKit/UIKit.h>
@interface PresentLogInVC : UIViewController
+(void)appearLogInVC;
@end
#import "PresentLogInVC.h"
static UINavigationController *_navController;
static PresentLogInVC *_viewController;
@interface 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.2cto.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