使用以下代码,我可以成功注销并在再次打开应用程序时显示登录屏幕。
我有一个用户个人资料页面,用于获取特定用户的所有数据。但是,登录后会出现问题。我获取了所有用户的数据。然后,当我最小化应用程序并再次打开它时,我的配置文件页面中的所有数据都将丢失。我认为这是因为我使用nil
方法将用户ID设置为setObject
。
有没有人知道如何使这项工作?
- (IBAction)logoutButtonTapped:(id)sender {
UIAlertView* alert = [[UIAlertView alloc]
initWithTitle:@"Confirmation"
message:@"Do you want to Logout?"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
[alert show];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:nil forKey:@"userID"];
[prefs synchronize];
}
以下是我用于注销的代码:
-(void)nextScreen: (NSTimer *) timer
{
NSLog(@"TEST");
NSString * storyboardName = @"Main";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
MenuScreenViewController *viewcontroller = [storyboard instantiateViewControllerWithIdentifier:@"loginScreenViewController"];
[self.navigationController pushViewController:viewcontroller animated:YES];
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex: (NSInteger)buttonIndex
{
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:2
target:self
selector:@selector(nextScreen:)
userInfo:nil
repeats:NO];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
[timer fire];
if (buttonIndex != 0) // 0 == the cancel button
{
//home button press programmatically
UIApplication *app = [UIApplication sharedApplication];
[app performSelector:@selector(suspend)];
//wait 2 seconds while app is going background
[NSThread sleepForTimeInterval:2.0];
//exit app when app is in background
NSLog(@"TIMER CALLED");
exit(0);
}else{
}
答案 0 :(得分:0)
您可以使用一个存储登录状态的bool
变量。如果已成功登录,则将状态存储到yes
到NSUserdefaults
。使用时点击NO
即可存储logout
。
因此,您可以time of app launching
查看如果状态为真,则rootviewcontroller
为homescreen
其他logingscreeen
不要操纵userId
以便您可以使用它。使用此布尔状态。
第二件事如果您在退出按钮上显示确认的alertview按钮,则不要在该操作方法中操纵NSUserdefaults
。因为如果用户按cancel
,那么您的user default
也会更改,并将用户视为logout
。
因此,您应该使用alertview delegate
方法来处理点击alertview
。您应该从user defaults
按钮点击ok
操纵alertview
,这可以通过委托方法实现。
希望这会有所帮助:)
答案 1 :(得分:0)
当您致电[alert show]
时,似乎您认为它停止在那里执行您的方法,并且只有在用户点击确定时才会继续。它不会那样工作。结果是,您在显示提醒视图,方法仍在继续,然后在点按任意按钮之前立即将userID
设置为nil
。然后,您可以点击警报视图中的按钮,并将有关您所点击的内容的信息丢弃。
如果您只想点击确定即可将某人注销,那么您需要实施UIAlertViewDelegate
协议,并将userID
设置为nil
如果点击了右键,则在委托方法中。
请注意,UIAlertView
已弃用,您应该在新代码中使用UIAlertController
。