TL; DRคุณสามารถมี 1 rootViewController เท่านั้นและมีการนำเสนอล่าสุด ดังนั้นอย่าพยายามให้ผู้ควบคุมการชมเสนอตัวควบคุมการดูอีกคนหนึ่งเมื่อมีการนำเสนอตัวควบคุมที่ไม่ได้ถูกไล่ออกไปแล้ว
หลังจากทำการทดสอบของฉันเองฉันก็ได้ข้อสรุป
หากคุณมี rootViewController ที่คุณต้องการนำเสนอทุกอย่างคุณสามารถพบปัญหานี้ได้
นี่คือรหัส rootController ของฉัน (เปิดเป็นทางลัดของฉันสำหรับการนำเสนอ 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: {})
}
ถ้าฉันโทรเปิดสองครั้งในแถว (ไม่คำนึงถึงเวลาที่ผ่านไป) สิ่งนี้จะใช้ได้ดีเมื่อเปิดครั้งแรก แต่ไม่เปิดครั้งที่สอง การเปิดครั้งที่สองจะส่งผลให้เกิดข้อผิดพลาดด้านบน
อย่างไรก็ตามถ้าฉันปิดมุมมองที่นำเสนอล่าสุดจากนั้นเปิดการโทรมันจะทำงานได้ดีเมื่อฉันเรียกเปิดอีกครั้ง (บนตัวควบคุมมุมมองอื่น)
func close(controller:UIViewController)
{
ROOT_VIEW_CONTROLLER.dismissViewControllerAnimated(true, completion: nil)
}
สิ่งที่ฉันสรุปไว้คือ rootViewController ของ MOST-RECENT-CALL เท่านั้นที่อยู่ในมุมมองลำดับชั้น (แม้ว่าคุณจะไม่ได้ยกเลิกหรือลบมุมมองก็ตาม) ฉันลองเล่นกับการเรียกโหลดเดอร์ทั้งหมด (viewDidLoad, viewDidAppear และทำการโทรส่งแบบหน่วงเวลา) และฉันพบว่าวิธีเดียวที่ฉันสามารถทำให้มันทำงานได้คือการเรียกปัจจุบันจากตัวควบคุมมุมมองด้านบนสุดเท่านั้น
presentViewController:animated:completion
ตัวควบคุม nav คุณทำสิ่งนี้ในตัวแทนแอพหรือไม่