执行 UIAlertController 时得到 nil

Getting nil while performing UIAlertController

我在 ViewController 中执行 UIAlertViewController 时遇到问题。

这是我目前拥有的

func displayLoginResult(viewModel: Login.PerformLogin.ViewModel) {
    endLoader(loader: loaderLogin)
    if let errorMessage = viewModel.displayedError {
        print(errorMessage.message)

        let alert = UIAlertController(title: "Error", message: "Enter data in Text fields", preferredStyle: UIAlertControllerStyle.Alert)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
        self.presentViewController(alert, animated: true, completion: nil)
    }
    else {
        router.navigateToGroupsScene()
    }
}

我试过删除 DerivedData 但没有成功。我只是在考虑 viewModel.displayedError 不是 nil 的情况(不是 else 情况,只是 if)。我看到如果我评论这一行:

self.presentViewController(alert, animated: true, completion: nil)

一切正常,但显然会显示任何对话框,这不是我想要的。我有点沮丧,因为我从来没有遇到过这样的问题,而且 Xcode 没有提供太多信息。

Xcode 异常:

线程详细信息:

您需要任何进一步的信息,请告诉我,我会为您提供!

非常感谢。

您似乎忘记删除观察者,将此代码添加到您的 LoginViewController class:

override func viewDidDisappear(animated: Bool) {
     NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: nil)
     NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: nil)
}

能否请您尝试使用以下代码:

func displayLoginResult(viewModel: Login.PerformLogin.ViewModel) {
    endLoader(loader: loaderLogin)
    if let errorMessage = viewModel.displayedError {
        print(errorMessage.message)

        let alert = UIAlertController(title: "Error", message: "Enter data in Text fields", preferredStyle: UIAlertControllerStyle.Alert)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))

        dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.presentViewController(alert, animated: true, completion: nil)
    })

    }
    else {
        router.navigateToGroupsScene()
    }
}