2017-01-13 13 views
2

私は警告コントローラを使用してcatchブロックにエラーを表示しています。しかし、ユーザーはそれ自体が消える前にそれをほとんど見ることができません。私は間違って何をしていますか?ここに私のコードです。ユーザーが応答する前にUIAlertControllerパネルが消える

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

(アニメーション:真、完了を:ゼロ)self.dismissを削除

1

あなたの問題は、self.dismiss(animated: true, completion: nil)が間違った場所に呼ばれていることです。 _alertControllerを提示するとすぐにこれを呼び出しています。アラートコントローラが表示されたら、実際に呼び出す必要はありません。 UIAlertActionはそれを破棄するよう処理します。

+0

私は警告パネルを却下しません、私はタブバーコントローラを却下します。しかし、私は完了ブロックを完全に削除し、警告パネルはまだ消えます。 –

+0

このコードを 'tabBarController:didSelectViewController:'に置き換えた場合はどうでしょうか?実際にSubmitInspectionViewControllerを表示させる(コードが表示された後に)trueを返すので、警告コントローラが却下されているかどうか疑問に思っています。 – darrenallen7

+0

私は実際にfalseを返しています。私はエラーがあったので、私が望むものです。 submitInspectionViewControllerは決して表示されるべきではありません。ただそこにあるので、このコードが実行されます。その後、タブバーコントローラを閉じます。私はこのコードをdidSelectで一度に持っていましたが、そこではうまくいきませんでした。 –

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 
     } 
関連する問題