TL; DR 1 개의 rootViewController와 가장 최근에 표시된 것만 가질 수 있습니다. 따라서 뷰 컨트롤러가 이미 닫히지 않은 뷰 컨트롤러를 제공 할 때 다른 뷰 컨트롤러를 제시하려고 시도하지 마십시오.
내 자신의 테스트 중 일부를 수행 한 후 결론에 도달했습니다.
모든 것을 제시하려는 rootViewController가 있으면이 문제가 발생할 수 있습니다.
여기 내 rootController 코드가 있습니다 (open은 루트에서 viewcontroller를 표시하는 바로 가기입니다).
func open(controller:UIViewController)
{
if (Context.ROOTWINDOW.rootViewController == nil)
{
Context.ROOTWINDOW.rootViewController = ROOT_VIEW_CONTROLLER
Context.ROOTWINDOW.makeKeyAndVisible()
}
ROOT_VIEW_CONTROLLER.presentViewController(controller, animated: true, completion: {})
}
(시간 경과에 관계없이) 연속으로 두 번 open을 호출하면 첫 번째 열림에서는 잘 작동하지만 두 번째 열림에서는 잘 작동하지 않습니다. 두 번째 열린 시도는 위의 오류를 발생시킵니다.
그러나 가장 최근에 표시된보기를 닫은 다음 open open을 사용하면 (다른 viewcontroller에서) open을 다시 호출하면 정상적으로 작동합니다.
func close(controller:UIViewController)
{
ROOT_VIEW_CONTROLLER.dismissViewControllerAnimated(true, completion: nil)
}
내가 결론을 내린 것은 MOST-RECENT-CALL만의 rootViewController가 뷰 계층에 있다는 것입니다 (뷰를 닫지 않았거나 뷰를 제거하지 않더라도). 모든 로더 호출 (viewDidLoad, viewDidAppear 및 지연 된 디스패치 호출 수행)을 사용하여 시도했지만 작동시킬 수있는 유일한 방법은 최상위 뷰 컨트롤러에서만 present를 호출하는 것입니다.
presentViewController:animated:completion
탐색 컨트롤러 를 호출하려고하는 것을 제외하고는 똑같은 문제가 있습니다. 앱 델리게이트에서이 작업을 수행하고 있습니까?