iOS viewWillAppear错误:"视图不在窗口层次结构中"

时间:2014-12-16 18:57:38

标签: ios swift ios8 viewwillappear viewdidappear

我有一个Swift应用程序,而我想要做的是每次应用程序变为活动状态时,我都想在会话中检查用户。如果没有找到,我想显示我在Storyboard中设计的登录视图控制器。如果找到了,我需要一切照常恢复。

我有另一个家庭视图控制器,它被设置为我的初始视图控制器。我不希望主视图控制器显示是否找不到用户。

我这样做是为了处理状态恢复,同时也在会话中寻找用户:

func application(application: UIApplication, shouldRestoreApplicationState coder: NSCoder) -> Bool {
    return <userInSession> != nil
}

我从家庭视图控制器创建了一个segue到登录视图控制器。在主视图控制器的viewDidAppear方法中,我检查以确保用户已登录。如果他们没有登录,我执行segue到登录视图控制器。

一旦用户登录您,我只需要点击登录视图控制器。

问题在于,因为我使用viewDidAppear,所以在登录视图控制器显示之前,如果用户未登录,则可以看到主视图控制器一瞬间。我想避免这种情况。我尝试使用viewWillAppear方法,但会产生以下错误:

2014-12-14 23:42:52.910 appname [78187:18685210]警告:尝试出示&lt; appname.LoginUIViewController:0x7fdcc1616970&gt; on&lt; appname.HomeUITabBarViewController:0x7fdcc1746610&gt;其视图不在窗口层次结构中!

关于如何处理这种情况的任何想法?

1 个答案:

答案 0 :(得分:0)

我认为您不能首先避免显示主视图,而是设置它的方式。 (在某些情况下,当流中的视图需要被绕过时,我已经看到了您所描述的问题。)

尝试重新排列故事板,以便首先登录视图控制器,然后转到主视图控制器。

当用户首次运行该应用时,他/她将需要先登录。成功登录后,用户将转到主视图控制器等。

当应用关闭时,通过在shouldSaveApplicationState中返回YES来保存应用状态。当app重新启动时,将调用shouldRestoreApplicationState。在那里检查用户是否已登录,如果没有则返回NO,以便不恢复状态。这应该强制用户开始使用应用程序,即登录视图。