为啥我的 UIViewController 失去了对打开模式 ViewController 的引用?
Posted
技术标签:
【中文标题】为啥我的 UIViewController 失去了对打开模式 ViewController 的引用?【英文标题】:Why has my UIViewController lost reference to open modal ViewController?为什么我的 UIViewController 失去了对打开模式 ViewController 的引用? 【发布时间】:2013-11-11 04:34:29 【问题描述】:我有一个视图控制器,它检查用户当前是否经过身份验证。如果不是,我会以模态方式呈现登录视图控制器。
-(void)showLoginView
UIStoryboard *storyBoard = [self storyboard];
LoginViewController *loginViewController = [storyBoard instantiateViewControllerWithIdentifier:@"LoginViewController"];
loginViewController.parentController = self;
[self presentViewController:loginViewController animated:NO completion:nil];
一旦用户通过身份验证,我想关闭模态登录视图控制器,但由于某种原因,父视图控制器失去了对模态控制器的引用。登录视图控制器开始使用 Facebook SDK 打开会话的过程。 Facebook 将打开它自己的 Web 视图以进行用户身份验证。这能负责吗?
-(void)loginSuccess
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
如果用户已成功通过身份验证,则模式登录视图会在父视图控制器上调用上述方法。然而 self.presentingViewController 为零。所以模态视图永远不会被解雇。有人可以帮忙告诉我这里做错了什么吗?
谢谢!
【问题讨论】:
【参考方案1】:喂!我很笨。我正在尝试这个:
-(void)loginSuccess
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
这应该是:
-(void)loginSuccess
[self.presentedViewController dismissViewControllerAnimated:YES completion:nil];
注意“presentingViewController”和“presentedViewController”之间的区别。
【讨论】:
呈现的视图控制器只会将消息转发回呈现的视图控制器,所以你应该只写 [self dismiss...。以上是关于为啥我的 UIViewController 失去了对打开模式 ViewController 的引用?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 UIViewController 被加载了两次? IOS 7
为啥我的 UIViewController 初始化程序从未被调用?