iOS - 在视图转换完成后显示UIAlertController完成

时间:2016-04-08 23:05:23

标签: ios objective-c uialertcontroller

在我的应用中,我让用户登录他们的Pocket应用帐户。 Pocket SDK将登录过程转发到Safari,当用户尝试登录时,会发生视图转换以返回我的应用程序。

与此同时,我的UIViewController收到NSNotification登录成功或失败,并且每当我尝试显示UIAlertController以向用户显示其是否成功时没有任何反应,我在日志控制台中得到以下内容:

  

不允许在取消分配时尝试加载视图控制器的视图,并且可能导致未定义的行为

我假设它是因为我的UIViewController在我的应用仍然从Safari过渡到我的视图时试图呈现UIAlertController

如何确保在视图转换结束后显示此UIAlertController

1 个答案:

答案 0 :(得分:1)

这里的问题是您(或UIAlertController)在不适当的时间访问视图控制器的.view属性。在未加载视图时,访问.view会自动触发loadView(然后viewDidLoad)(请参阅isViewLoaded)。

你有很多选择。

最简单的方法是向视图控制器添加一个属性,以标记是否需要显示警报。观察通知时,将标志设置为YES。然后,在-viewDidAppear:中,您可以检查标志,显示警报并将标志翻转为NO。

您还可以在收到通知的位置添加“短路”检查,例如:

if (self.isViewLoaded) {
    // show alert now
} else {
    self.needsShowAlert = YES;
}