尝试在UINavigationController上呈现UIAlertController,其视图不在窗口层次结构中

时间:2016-05-27 19:54:38

标签: ios swift appdelegate uialertcontroller

我正在尝试在AppDelegate中创建UIAlertController来处理我的前台本地通知。我的代码如下所示:

func application(application: UIApplication, didReceiveLocalNotificationnotification: UILocalNotification) {
    let state: UIApplicationState = application.applicationState
    if state == .Active {
        let alert: UIAlertController = UIAlertController(title: "test", message: "test", preferredStyle: UIAlertControllerStyle.Alert)
        self.window?.rootViewController?.presentViewController(alert, animated: true, completion: nil)

    }
}

但后来我收到了这个错误: Attempt to present UIAlertController on UINavigationController whose view is not in the window hierarchy

我已经找到了可能的解决方案,但它们对我不起作用(dispatch_async,创建了func)。我认为它与部件'rootviewcontroller'有关,但我不知道如何修复它。这可以修复,还是在前台处理本地通知的另一种方法?

1 个答案:

答案 0 :(得分:2)

因此,您可能会遇到此错误的原因有多种。我猜你的根视图控制器还没有被显示,或者你的根视图控制器就像UINavigationController,它不应该呈现视图。

如果是后者,那么只需从顶视图控制器显示即可轻松修复。所以这样的事情可能是:

(self.window?.rootViewController as? UINavigationController)?.topViewController.presentViewController(alert, animated: true, completion: nil)

在执行此工作时,你真的应该远离dispatch_async,因为首先调度到除了主线程之外的任何东西都会让你进入一个巨大的痛苦世界(UI操作只能在主线程上执行)并调度到主队列的结尾是一个糟糕的解决方案(如果它可以工作)。