TL; DR Anda hanya dapat memiliki 1 rootViewController dan yang terbaru disajikan. Jadi jangan coba-coba membuat viewcontroller menyajikan viewcontroller lain ketika sudah disajikan yang belum diberhentikan.
Setelah melakukan beberapa pengujian saya sendiri saya sampai pada kesimpulan.
Jika Anda memiliki rootViewController yang ingin Anda sajikan semuanya maka Anda dapat mengalami masalah ini.
Berikut ini adalah kode rootController saya (terbuka adalah jalan pintas saya untuk menghadirkan viewcontroller dari root).
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: {})
}
Jika saya memanggil terbuka dua kali berturut-turut (terlepas dari waktu yang berlalu), ini akan berfungsi dengan baik pada pembukaan pertama, tetapi BUKAN pada pembukaan kedua. Upaya terbuka kedua akan menghasilkan kesalahan di atas.
Namun jika saya menutup tampilan yang paling baru disajikan kemudian memanggil terbuka, itu berfungsi dengan baik ketika saya memanggil terbuka lagi (pada viewcontroller lain).
func close(controller:UIViewController)
{
ROOT_VIEW_CONTROLLER.dismissViewControllerAnimated(true, completion: nil)
}
Apa yang saya simpulkan adalah bahwa rootViewController hanya MOST-RECENT-CALL ada pada tampilan Hierarchy (bahkan jika Anda tidak mengabaikannya atau menghapus tampilan). Saya mencoba bermain dengan semua panggilan loader (viewDidLoad, viewDidAppear, dan melakukan panggilan pengiriman tertunda) dan saya telah menemukan bahwa satu-satunya cara saya bisa membuatnya bekerja adalah HANYA memanggil hadir dari pengendali tampilan paling atas.
presentViewController:animated:completion
pengontrol nav. Apakah Anda melakukan ini di delegasi aplikasi?