执行 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()
}
}
我在 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()
}
}