为啥我的 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 失去了对属性的跟踪

为啥我的 UIViewController 被加载了两次? IOS 7

为啥我的新 python 编辑照片失去了亮度?

为啥我的 UIViewController 初始化程序从未被调用?

为啥我的 UIViewController 不在其视图的响应者链中?

为啥我的 Vue js 应用在路由到其他组件时会失去焦点?