버그 잡이

WKWebview Crash - OBSERVER_WAS_OVERRELEASED_OR_SMASHED 본문

IOS

WKWebview Crash - OBSERVER_WAS_OVERRELEASED_OR_SMASHED

버그잡이 2022. 8. 5. 19:30

문제 상황

 

웹뷰에서 아래와 같은 크래시가 발생하였습니다.

KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED

 

옵저버가 overreleased 되거나 smashed 되어서 생긴 이슈라고 합니다.

 

 

발생 환경

 

1) 웹뷰는 아래 옵저버를 가지고 있다.

webview.addObserver(self, forKeyPath: "estimatedProgress", option: .new, context: nil)

 

2) 위 웹뷰가 2개 이상 겹쳐서 띄워져 있다.

 

3) 웹뷰들을 한번에 dismiss 한다.

 

 

원인 분석

 

(뇌피셜) 같은 이름의 옵저버가 2개 이상 있고, 이를 해제하려고 할때 참조가 꼬여서 크래시가 나는 것 같습니다.

 

 

해결 방법

 

viewWillAppear에서 옵저버를 달아준 경우 -> viewDidDisappear 에서 옵저버 제거

viewDidLoad에서 옵저버를 달아준 경우 -> deinit 에서 옵저버 제거

override func viewDidDisappear(_ animated: Bool) {
	super.viewDidDisappear(animated)
    
    self.webview.removeObserver(self, forKeyPath: "estimatedProgress")
}

 

 

반응형
Comments