Error Message (1) - Attempt to present <UIAlertController:> ~~~ which is already presenting <UIAlertController>

sun02·2021년 7월 24일
2

Error

목록 보기
1/4

Error Message 해결하기 (1)

[Presentation] Attempt to present <UIAlertController: 0x7fb97a865800> on <UINavigationController: 0x7fb97c814600> (from <SyPolaroid.ViewController: 0x7fb97c2080c0>) which is already presenting <UIAlertController: 0x7fb97c848200>.

=> 이미 present 하고 있는 UIAlertController를 UINavigationController에 present 하려 한다

  • 일반적으로 이러한 에러는 다양한 상태를 가지는 gestureRecognizer에서 많이 발생하는 것 같다. 어떤 시점에 UIAlertController가 present되어야하는지 명시되어있지 않으므로 present가 중복되는 에러 발생하는 것이다.
@objc func handleLongPress(_gesture:UILongPressGestureRecognizer) {
    
        switch _gesture.state {
        case .began:
            //statements
        case .changed:
            //statements
        case .ended:
            //statements
        default:
            //statements
        }
}

그러므로 다음과 같이 switch 문을 이용하여 해당 제스쳐의 상태별로 case를 나누고, UIAlertController가 나타났으면 하는 시점에 코드를 작성해주면 된다.

그러나 만약 상태 별로 나눌 필요가 없다면 아래 두 코드 중 하나를 작성해 주면 된다

@objc func handleLongPress(_gesture:UILongPressGestureRecognizer) {
     if _gesture.state != .ended {
                return
        }
}

또는

@objc func handleLongPress(_gesture:UILongPressGestureRecognizer) {
     if _gesture.state == .began {
                return
        }
}
  • 추가 : UIAlertController를 포함하고 있는 UILongGestureController를 View에 addGestureRecognizer() 하는 코드는 viewDidAppear에 작성해주는게 좋다고 한다. viewDidLoad에 작성해주어도 크게 상관은 없지만!

0개의 댓글