我正在使用parse.com。我有一个UINavigationController
自定义类chwRootViewController
,它被设置为初始视图。
当用户成功登录时,运行:
// Sent to the delegate when a PFUser is logged in.
- (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user {
[self dismissViewControllerAnimated:YES completion:NULL];
}
现在chwMainviewController
是登录方法解除UIViewController
时显示的chwRootViewController
。在主视图控制器中,我有一个IBAction
用于单击注销按钮,如下所示:
- (IBAction)logoutButtonClicked:(id)sender {
[PFUser logOut]; // Log out
// Return to login page
if (![PFUser currentUser]) {
[self.navigationController popToRootViewControllerAnimated:YES];
}
问题是最后一行将用户返回到登录屏幕,但现在chwMainViewController
已不再准备好并在登录屏幕后面等待。当您第二次登录时,chwRootViewController
被解除时只有黑屏。我做错了什么?
答案 0 :(得分:2)
您可以使用以下步骤:
在您的初始view controller
即chwMainviewController.m
文件中,执行:
实施viewDidAppear
方法,如下所示:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:YES];
if (![PFUser currentUser]) {
[self showLogInPage];
}
}
编写code
以在showLogInPage
方法中显示解析登录页面,如下所示:
- (void)showLogInPage
{
PFLogInViewController *logInController = [[PFLogInViewController alloc] init];
logInController.delegate = self;
logInController.fields = PFLogInFieldsUsernameAndPassword | PFLogInFieldsLogInButton | PFLogInFieldsSignUpButton | PFLogInFieldsFacebook;
PFSignUpViewController *signUpController = [[PFSignUpViewController alloc] init];
signUpController.delegate = self;
logInController.signUpController = signUpController;
[self presentViewController:logInController animated:YES completion:nil];
}
最后,按照以下方式实施logoutButtonClicked
:
- (IBAction)logoutButtonClicked:(id)sender {
[PFUser logOut];
[self showLogInPage];
}
注意:强>
如果您未使用 情节提要 ,请确保在chwMainviewController
方法中将rootViewController
设为application didFinishLaunchingWithOptions
希望这有帮助!
答案 1 :(得分:0)
问题是你正在解雇rootViewController
。
我认为你应该采用类似
的结构在didFinishLaunching
RootCOntroller
navigationController
- rootViewController
- > applicationDidBecomeActive
并登录时检查navigationController
处的值,并在{{1}}的帮助下将控制器显示为模型