সাধারণত, সিস্টেমটি স্টোরিবোর্ডের সাথে ভিউ কন্ট্রোলার ইনস্ট্যান্টেশন পরিচালনা করতে হবে। আপনি যা চান তা হ'ল self.window.rootViewController
নিয়ন্ত্রককে ভিউ কন্ট্রোলার শুরুর বিপরীতে একটি রেফারেন্স ধরে ধরে ভিউ কন্ট্রোলার হায়ারার্কিকে অতিক্রম করে যা ইতিমধ্যে আপনার স্টোরিবোর্ডটি সঠিকভাবে সেটআপ করা হলে এটি ইতিমধ্যে সঠিকভাবে শুরু করা উচিত।
সুতরাং, আসুন আমরা বলি যে আপনি rootViewController
একটি ইউআইএনএভিগেশন কন্ট্রোলার এবং তারপরে আপনি এর শীর্ষ ভিউ কন্ট্রোলারের কাছে কিছু পাঠাতে চান, আপনি আপনার অ্যাপডেলিগেটে এটি এরকম করুন 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
স্টোরিবোর্ডটি লোড না করা এবং পুরো স্টোরিবোর্ডটি নিজে নিজে লোড করা না চাইলে আপনি অ্যাপ স্টেলিগেটের স্টোরিবোর্ড আইডি ব্যবহার করে দৃশ্য নিয়ন্ত্রণকারীদের সত্যিই আরম্ভ করা উচিত নয়। যদি আপনি অ্যাপডেলিগেট থেকে দৃশ্য শুরু করতেই পারেন তবে আপনি সম্ভবত কিছু ভুল করছেন। আমি বলতে চাইছি আপনি, কোনও কারণে, স্ট্যাকের নিচে একটি ভিউ কন্ট্রোলারের কাছে ডেটা প্রেরণ করতে চান, অ্যাপ্লিকেশনটি ডেটা সেট করার জন্য ভিউ কন্ট্রোলার স্ট্যাকের কাছে পৌঁছানো উচিত নয়। এটি তার ব্যবসা নয়। এটির ব্যবসায় হ'ল রুটভিউ নিয়ন্ত্রণকারী। রুটভিউ নিয়ন্ত্রণকারীকে তার নিজস্ব বাচ্চাদের পরিচালনা করতে দিন! সুতরাং, যদি আমি তথ্য.প্লেস্ট ফাইলটিতে রেফারেন্সগুলি মুছে ফেলে সিস্টেমের দ্বারা সাধারণ স্টোরিবোর্ড লোডিং প্রক্রিয়াটি বাইপাস করি, তবে আমি বেশিরভাগই রুটভিউ নিয়ন্ত্রণকারীকে ব্যবহার করে ইনস্ট্যান্ট করবinstantiateViewControllerWithIdentifier:
, এবং সম্ভবত এটির মূল যদি এটি কোনও ইউআইএনএভিগেশন কন্ট্রোলারের মতো ধারক হয়। আপনি যা এড়াতে চান তা হ'ল স্টোরবোর্ডের মাধ্যমে ইতিমধ্যে ইনস্ট্যান্ট করা ভিউ কন্ট্রোলারদের ইনস্ট্যান্ট করা। এই সমস্যা আমি অনেক দেখতে। সংক্ষেপে, আমি গৃহীত উত্তরের সাথে একমত নই। পোস্টারগুলির অর্থ তথ্য.প্লেস্ট থেকে স্টোরিবোর্ডের লোডিং মুছে ফেলা না হওয়া পর্যন্ত এটি ভুল কারণ আপনি 2 স্টোরিবোর্ড অন্যথায় লোড করে রেখেছেন, যা কোনও অর্থ দেয় না। এটি সম্ভবত কোনও স্মৃতি ফাঁস নয় কারণ সিস্টেমটি মূল দৃশ্যের সূচনা করেছিল এবং এটি উইন্ডোতে নির্ধারিত করেছে, কিন্তু তারপরে আপনি এসে আবার এটি ইনস্ট্যান্টিয়েট করে আবার এ্যাসাইন করেছেন। আপনার অ্যাপ্লিকেশনটি বেশ খারাপ শুরু করেছে!