TL; DR आप केवल 1 rootViewController और इसके सबसे हाल ही में प्रस्तुत किया जा सकता है। इसलिए जब वह पहले से ही बर्खास्त नहीं किया गया है, तो एक व्यूकंट्रोलर दूसरे व्यू कॉन्ट्रॉलर को पेश करने की कोशिश न करें।
अपने खुद के कुछ परीक्षण करने के बाद मैं एक निष्कर्ष पर पहुंचा हूं।
यदि आपके पास एक rootViewController है जिसे आप सब कुछ पेश करना चाहते हैं तो आप इस समस्या में भाग सकते हैं।
यहां मेरा रूटकंट्रोलर कोड है (ओपन रूट से व्यूकंट्रोलर प्रस्तुत करने के लिए मेरा शॉर्टकट है)।
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)
}
मैंने जो निष्कर्ष निकाला है वह यह है कि केवल MOST-RECENT-CALL का rootViewController दृश्य पदानुक्रम पर है (भले ही आपने इसे खारिज नहीं किया हो या कोई दृश्य न हटाएं)। मैंने सभी लोडर कॉल (viewDidLoad, viewDidAppear, और विलंबित कॉल को कॉल करते हुए) के साथ खेलने का प्रयास किया और मैंने पाया है कि जिस तरह से मैं इसे काम कर सकता था वह केवल शीर्ष सबसे दृश्य नियंत्रक से मौजूद कॉलिंग है।
presentViewController:animated:completion
एक नव नियंत्रक पर कॉल करने की कोशिश करने के अलावा । क्या आप ऐप प्रतिनिधि में ऐसा कर रहे हैं?