注销后,在View Controller中删除所有用户数据

时间:2014-09-05 10:30:34

标签: ios objective-c cocoa

当我登录我的应用时,我的应用确实推送了ViewController XYZMainViewControllerXYZMainViewController viewWillAppear:animated调用方法,该方法向我的API请求检索经过身份验证的用户数据,时间我更新标签的文本以显示用户名。当我注销应用程序时,它返回登录ViewController,当我再次与另一个用户登录时,XYZMainViewController标签文本包含前一个用户的名称,而不更新标签文本。

XYZMainViewController.m

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:NO];
    [self homeProfile];
}

- (void)homeProfile
{
    [NXOAuth2Request performMethod:@"GET"
                        onResource:[NSURL URLWithString:@"http://{url}/users/userinfo"]
                   usingParameters:nil
                       withAccount:[XYZCommonFunctions user]
               sendProgressHandler:nil
               responseHandler:^(NSURLResponse *response, NSData *responseData, NSError *error){
                   NSDictionary *parsedData = [[NSJSONSerialization JSONObjectWithData:responseData options:0 error:&error] objectForKey:@"data"];
                   _user = [parsedData objectForKey:@"user"];
                   [self.label setText:[NSString stringWithFormat:@"Welcome %@!", [_user objectForKey:@"username"]]];
               }];

}

- (IBAction)logout:(id)sender {
    XYZAppDelegate* appDelegate = (XYZAppDelegate*)[[UIApplication sharedApplication] delegate];
    [appDelegate logout];
}

XYZAppDelegate.m

- (void)login
{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    NSString *identifier = [prefs stringForKey:@"accountidentifier"];
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
    NSString *viewIdentifier = @"WelcomeView";
    if(identifier != nil){
        NXOAuth2Account *account = [[NXOAuth2AccountStore sharedStore] accountWithIdentifier:identifier];
        if(account != nil) {
            viewIdentifier = @"MainView";
        }
        UIViewController *controller = [mainStoryboard instantiateViewControllerWithIdentifier: viewIdentifier];
        [navigationController pushViewController:controller animated:NO];
        return;
    }
}

- (void)logout
{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    [prefs removeObjectForKey:@"accountidentifier"];
    [prefs synchronize];
    for (NXOAuth2Account *a in [[NXOAuth2AccountStore sharedStore] accounts] ){
        [[NXOAuth2AccountStore sharedStore] removeAccount:a];
    }
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
    [navigationController popToRootViewControllerAnimated:YES];
}

我需要重新初始化XYZMainViewController中的所有数据。

谢谢。

2 个答案:

答案 0 :(得分:0)

看起来问题与获取JSON对象有关。每次发送相同用户以获取用户数据时,都有可能发生这种情况。您没有使用NSUserdefault对象来显示名称,您正在使用值,这是由JSON对象返回的。根据我的错误原因是“withAccount:[XYZCommonFunctions user]”行。

答案 1 :(得分:0)

我想建议,而不是使用

-(void)viewWillAppear:(BOOL)animated {

你可以使用

- (void)viewDidLoad

这样只有当你的LoginController加载时才会执行你的登录操作,而不是当LoginController出现时。

新的viewwillAppear看起来如下 -

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:NO];
    [self.label setText:@""];
}

和ViewDidLoad -

- (void)viewDidLoad 
{
  [super viewDidLoad];
  [self homeProfile];
}

同时检查您的json响应,无论您是否获得响应成功或错误。根据响应需要处理。

希望这会有所帮助。

相关问题