आम तौर पर, सिस्टम को स्टोरीबोर्ड के साथ व्यू कंट्रोलर इंस्टेंटेशन को हैंडल करना चाहिए। आप जो चाहते हैं वह self.window.rootViewController
व्यू कंट्रोलर पदानुक्रम का पता लगाने के लिए है, जैसा कि आप अपने स्टोरीबोर्ड को ठीक से सेटअप करने पर पहले से ही सही ढंग से आरंभीकृत किया जाना चाहिए, जो व्यू कंट्रोलर्स को शुरू करने के लिए एक संदर्भ को हथियाने के द्वारा है।
तो, rootViewController
मान लें कि आपका UINavigationController है और फिर आप इसके शीर्ष दृश्य नियंत्रक को कुछ भेजना चाहते हैं, आप इसे अपने AppDelegate में इस तरह से करेंगे didFinishLaunchingWithOptions
:
UINavigationController *nav = (UINavigationController *) self.window.rootViewController;
MyViewController *myVC = (MyViewController *)nav.topViewController;
myVC.data = self.data;
स्विफ्ट में अगर बहुत समान होगा:
let nav = self.window.rootViewController as! UINavigationController;
let myVC = nav.topViewController as! MyViewController
myVc.data = self.data
जब तक आप सामान्य तरीके से स्टोरीबोर्ड लोड नहीं किया जाता है और पूरे स्टोरीबोर्ड को स्वयं लोड करना चाहते हैं, तब तक आपको ऐप प्रतिनिधि से स्टोरीबोर्ड आईडी का उपयोग करके दृश्य नियंत्रकों को प्रारंभिक रूप से निर्धारित नहीं करना चाहिए। यदि आप AppDelegate से दृश्यों को इनिशियलाइज़ करने वाले हैं, तो आप संभवतः कुछ गलत कर रहे हैं। मेरा मतलब है कि आप किसी कारण से, स्टैक के नीचे व्यू कंट्रोलर तरीके से डेटा भेजना चाहते हैं, AppDelegate को डेटा सेट करने के लिए व्यू कंट्रोलर स्टैक में रास्ता नहीं बनाना चाहिए। वह इसका व्यवसाय नहीं है। यह व्यवसाय rootViewController है। RootViewController को अपने बच्चों को संभालने दें! इसलिए, यदि मैं सिस्टम द्वारा सामान्य स्टोरीबोर्ड लोड करने की प्रक्रिया को बायपास कर रहा था, तो इसके लिए संदर्भ को हटाकर info.plist फ़ाइल में, मैं rootViewController का उपयोग करते हुए सबसे अधिक त्वरित रूप से करना चाहूंगाinstantiateViewControllerWithIdentifier:
, और संभवतः इसकी जड़ अगर यह एक कंटेनर है, जैसे कि UINavigationController। जो आप बचना चाहते हैं, वह दृश्य नियंत्रकों को त्वरित करने के लिए है जो स्टोरीबोर्ड द्वारा पहले से ही इंस्टेंट किए गए हैं। यह एक समस्या है जिसे मैं बहुत कुछ देखता हूं। संक्षेप में, मैं स्वीकृत उत्तर से असहमत हूं। यह गलत है जब तक कि पोस्टर का मतलब स्टोरीबोर्ड को जानकारी से लोड करना नहीं है। तब से जब तक आप 2 स्टोरीबोर्ड लोड नहीं करेंगे, अन्यथा इसका कोई मतलब नहीं है। यह शायद एक मेमोरी लीक नहीं है क्योंकि सिस्टम ने रूट दृश्य को इनिशियलाइज़ किया और इसे विंडो को सौंपा, लेकिन फिर आप साथ आए और इसे फिर से शुरू किया और इसे फिर से असाइन किया। आपका ऐप बहुत खराब शुरुआत के लिए बंद है!