尝试在已经呈现 UIAlertController 的 ViewController 上呈现 UIViewController
Attempt to present UIViewController on ViewController which is already presenting UIAlertController
我刚接触 swift iOS 编程。我写了一些代码。很简单,我想执行一个警报,然后通过 "performSegueWithIdentifier" 移动到另一个视图控制器。但我得到了这个输出:
"Warning: Attempt to present UIViewController: 0x7fa05b72dd60 on Kilaundry.ViewController: 0x7fa05b49a2c0 which is already presenting UIAlertController: 0x7fa05d859d70 "
我认为警告是在这段代码之后:"NSOperationQueue.mainQueue().addOperationWithBlock"。
为什么我不能执行警报然后通过 "performSegueWithIdentifier" 移动到另一个视图控制器?请帮助我找出为什么会出现此警告。
这是我的代码:
if let data = data, let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary {
print(jsonResult)
Resp_code = jsonResult["Resp_code"] as? String;
Resp_message = jsonResult["Resp_message"] as? String;
if Resp_code == "01" {
NSOperationQueue.mainQueue().addOperationWithBlock {
let alert = UIAlertController(title: "Information", message:Resp_message!, preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "OK", style: .Default) { _ in })
self.presentViewController(alert, animated: true){}
self.performSegueWithIdentifier("LoginSucceed", sender: self)
}
} else {
NSOperationQueue.mainQueue().addOperationWithBlock {
let alert = UIAlertController(title: "Oops!", message:"It seems "+Resp_message!, preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "OK", style: .Default) { _ in })
self.presentViewController(alert, animated: true){}
}
}
}
您收到此错误是因为您试图在已经显示模态的视图控制器上呈现模态视图控制器 VC - 您呈现警报控制器,然后立即触发 segue(这大概也是模态)。
一个视图控制器在给定时间只能有一个呈现视图控制器。做你想做的最简单的方法是在 "LoginSucceeded" segue 出现的 VC 上显示 'OK' 警报。
但是,我会重新考虑您是否应该显示警报。我建议您阅读 official Apple guidelines on the use of alerts - 基本上说“除非您确实需要,否则不要显示警报”。尤其是,不要显示警报来通知用户该应用程序运行正常。
当您的请求失败时显示错误警报是正确的 - 没有必要在用户成功登录时显示错误警报。
我刚接触 swift iOS 编程。我写了一些代码。很简单,我想执行一个警报,然后通过 "performSegueWithIdentifier" 移动到另一个视图控制器。但我得到了这个输出:
"Warning: Attempt to present UIViewController: 0x7fa05b72dd60 on Kilaundry.ViewController: 0x7fa05b49a2c0 which is already presenting UIAlertController: 0x7fa05d859d70 "
我认为警告是在这段代码之后:"NSOperationQueue.mainQueue().addOperationWithBlock"。
为什么我不能执行警报然后通过 "performSegueWithIdentifier" 移动到另一个视图控制器?请帮助我找出为什么会出现此警告。
这是我的代码:
if let data = data, let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary {
print(jsonResult)
Resp_code = jsonResult["Resp_code"] as? String;
Resp_message = jsonResult["Resp_message"] as? String;
if Resp_code == "01" {
NSOperationQueue.mainQueue().addOperationWithBlock {
let alert = UIAlertController(title: "Information", message:Resp_message!, preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "OK", style: .Default) { _ in })
self.presentViewController(alert, animated: true){}
self.performSegueWithIdentifier("LoginSucceed", sender: self)
}
} else {
NSOperationQueue.mainQueue().addOperationWithBlock {
let alert = UIAlertController(title: "Oops!", message:"It seems "+Resp_message!, preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "OK", style: .Default) { _ in })
self.presentViewController(alert, animated: true){}
}
}
}
您收到此错误是因为您试图在已经显示模态的视图控制器上呈现模态视图控制器 VC - 您呈现警报控制器,然后立即触发 segue(这大概也是模态)。 一个视图控制器在给定时间只能有一个呈现视图控制器。做你想做的最简单的方法是在 "LoginSucceeded" segue 出现的 VC 上显示 'OK' 警报。
但是,我会重新考虑您是否应该显示警报。我建议您阅读 official Apple guidelines on the use of alerts - 基本上说“除非您确实需要,否则不要显示警报”。尤其是,不要显示警报来通知用户该应用程序运行正常。 当您的请求失败时显示错误警报是正确的 - 没有必要在用户成功登录时显示错误警报。