在我的应用中,我让用户登录他们的Pocket应用帐户。 Pocket SDK将登录过程转发到Safari,当用户尝试登录时,会发生视图转换以返回我的应用程序。
与此同时,我的UIViewController
收到NSNotification
登录成功或失败,并且每当我尝试显示UIAlertController
以向用户显示其是否成功时没有任何反应,我在日志控制台中得到以下内容:
不允许在取消分配时尝试加载视图控制器的视图,并且可能导致未定义的行为
我假设它是因为我的UIViewController
在我的应用仍然从Safari过渡到我的视图时试图呈现UIAlertController
。
如何确保在视图转换结束后显示此UIAlertController
?
答案 0 :(得分:1)
这里的问题是您(或UIAlertController)在不适当的时间访问视图控制器的.view
属性。在未加载视图时,访问.view
会自动触发loadView
(然后viewDidLoad
)(请参阅isViewLoaded
)。
你有很多选择。
最简单的方法是向视图控制器添加一个属性,以标记是否需要显示警报。观察通知时,将标志设置为YES。然后,在-viewDidAppear:
中,您可以检查标志,显示警报并将标志翻转为NO。
您还可以在收到通知的位置添加“短路”检查,例如:
if (self.isViewLoaded) {
// show alert now
} else {
self.needsShowAlert = YES;
}