UIAlertController面板在用户响应之前消失

时间:2017-01-13 22:44:44

标签: ios swift controller alert uialertcontroller

我使用警报控制器在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)
            })
        }

3 个答案:

答案 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)