我使用警报控制器在catch块中显示错误。但是,用户在消失之前几乎看不到它。我究竟做错了什么?这是我的代码。
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if viewController is CancelInspectionViewController {
persistentContainer.viewContext.rollback()
self.dismiss(animated: true, completion: nil)
return false
} else if viewController is SubmitInspectionViewController {
do {
try persistentContainer.viewContext.save()
self.dismiss(animated: true, completion: nil)
} catch {
_alertController = UIAlertController(title: "Error Saving", message: error.localizedDescription, preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
_alertController.addAction(defaultAction)
present(_alertController, animated:true, completion: {
self.dismiss(animated: true, completion: nil)
})
}
答案 0 :(得分:1)
您的问题是在错误的地方调用了self.dismiss(animated: true, completion: nil)
。您在提交_alertController后立即调用此方法。一旦显示警报控制器,您实际上不需要调用此方法。 UIAlertAction处理解雇它。
答案 1 :(得分:1)
我明白了!我误解了警报控制器是如何工作的。我认为它会阻止线程,直到用户响应;它不是。因此,此函数后面的代码将解除警报面板。
工作代码在显示警报后返回false。
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if viewController is CancelInspectionViewController {
persistentContainer.viewContext.rollback()
self.dismiss(animated: true, completion: nil)
return false
} else if viewController is SubmitInspectionViewController {
do {
try persistentContainer.viewContext.save()
self.dismiss(animated: true, completion: nil)
} catch {
let alertController = UIAlertController(title: "Error Saving", message: error.localizedDescription, preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
alertController.addAction(defaultAction)
present(alertController, animated:true, completion: nil)
return false
}
答案 2 :(得分:0)
删除self.dismiss(animated:true,completion:nil)