TL; DR Bạn chỉ có thể có 1 rootViewControll và một cái được trình bày gần đây nhất. Vì vậy, đừng thử có một trình điều khiển khung nhìn trình bày một trình điều khiển khác khi nó đã được trình bày một trình điều khiển chưa bị loại bỏ.
Sau khi thực hiện một số thử nghiệm của riêng tôi, tôi đã đi đến kết luận.
Nếu bạn có một rootViewController mà bạn muốn tất cả mọi thứ hiện tại thì bạn có thể chạy vào vấn đề này.
Đây là mã rootControll của tôi (mở là lối tắt của tôi để trình bày một trình điều khiển khung nhìn từ gốc).
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: {})
}
Nếu tôi gọi mở hai lần liên tiếp (bất kể thời gian đã trôi qua), điều này sẽ hoạt động tốt ở lần mở đầu tiên, nhưng KHÔNG ở lần mở thứ hai. Lần thử mở thứ hai sẽ dẫn đến lỗi ở trên.
Tuy nhiên, nếu tôi đóng chế độ xem được trình bày gần đây nhất sau đó gọi mở, nó sẽ hoạt động tốt khi tôi gọi lại mở (trên một trình điều khiển chế độ xem khác).
func close(controller:UIViewController)
{
ROOT_VIEW_CONTROLLER.dismissViewControllerAnimated(true, completion: nil)
}
Những gì tôi đã kết luận là rootViewContaptor chỉ MOST-RECENT-CALL nằm trong chế độ xem Phân cấp (ngay cả khi bạn không loại bỏ nó hoặc xóa chế độ xem). Tôi đã thử chơi với tất cả các cuộc gọi của trình tải (viewDidLoad, viewDidAppear và thực hiện các cuộc gọi chuyển phát chậm) và tôi thấy rằng cách duy nhất tôi có thể khiến nó hoạt động là CHỈ gọi hiện tại từ bộ điều khiển xem nhiều nhất.
presentViewController:animated:completion
bộ điều khiển điều hướng. Bạn đang làm điều này trong đại biểu ứng dụng?