기존에 v1 버전으로 daummap framework 사용하고 있었고, 이번에 v2를 적용하기 위해 privacy manifest 적용된 2.10.1 버전을 다운받아 개발중에 있습니다
어느정도 변환을 완료하고 디버깅하면서 작업하려는데 init 단계에서 초기화가 실패하는것 같아서 문의드립니다
샘플코드의 APISampleBaseViewController를 참고하여 BaseMapViewController라는 뷰컨트롤러를 생성했고, appDelegate에서 최초로 호출하는 화면에서 BaseMapViewController를 상속하고 있습니다
따라서 앱을 최초 실행하고 초기화면으로 이동하는중에 init을 수행하게 되는데, 자꾸 init을 두번 진행하고 deinit으로 넘어가서 최초화면을 호출할때 exc_bad_access(thread1 0x0) 에러가 뜨고 있습니다
로그를 보면
init
init
deinit
[K3f] [I][KMSDK] [MTLMapContainer(5290260)] initializeView
이렇게 init 두번 deinit 한번이 찍혀있고 initialView 시도 후에 exc_bad_access 에러가 뜨고 있는 상황입니다
exc_bad_access 에러가 뜨는거는 최초화면으로 넘어갈때 view가 존재해야 하는데, deinit이 되서 view가 존재하지 않기 때문에 null을 참조하기 때문으로 짐작됩니다
appDelegate에서 SDKInitializer 통해 appKey도 주입했습니다
혹시 예상가는 원인이 있을까요?
중단점을 통해 단계별로 확인해보니
앱이 최초실행될때 navigationController를 set하는 과정에서 deinit이 발생합니다
코드로 말씀드리면
let storyboard = UIStorybard.init(name : “Main”, bundel : nil)
let mainNavigation = storyboard.instantiateViewController(withIdentifier : “MainNavigation”) as ? UINavigationController
let mainViewController = storyboard.instantiateViewController(withIdentifier : “MainViewController”)
mainNavigation?.setViewControllers([mainViewController], animated : false)
window?.rootViewController = mainNavigation
MainNavigation은 앱의 최초 진입점이고 MainViewController는 앱의 초기화면으로 설정한 View입니다
MainViewController는 BaseMapViewController를 상속받고 있습니다
디버깅을 해보면
let mainNavigation = storyboard.instantiateViewController(withIdentifier : “MainNavigation”) as ? UINavigationController 을 선언할때 BaseMapViewController에서 init이 한번 발생하고
let mainViewController를 선언할때 init이 한번 더 발생합니다
그리고 mainNavigation?.setViewControllers를 실행할때 deinit이 발생합니다
따라서 window?.rootViewCOntroller를 설정할때는 MainViewController에 세팅되는 view가 없어서 오류가 발생하는 것으로 보입니다
혹시 deinit이 발생하는 이유가 있을까요? deinit은 해당 화면에서 빠져나올때 수행되는 것으로 알고 있는데, 지금 로직에서 화면을 벗어나는 것은 없는 것으로 보입니다…