当我登录我的应用时,我的应用确实推送了ViewController XYZMainViewController
,XYZMainViewController
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
中的所有数据。
谢谢。
答案 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响应,无论您是否获得响应成功或错误。根据响应需要处理。
希望这会有所帮助。