অ্যাপডেলিগেট উদাহরণের ভেরিয়েবলগুলি উল্লেখ করে


84

আমার একটি প্রকল্প রয়েছে যা নেভিগেশন ভিত্তিক অ্যাপ্লিকেশন টেম্পলেট ভিত্তিক। AppDelegate ইন পদ্ধতি -applicationDidFinishLoading:এবং -applicationWillTerminate:। এই পদ্ধতিগুলিতে, আমি অ্যাপ্লিকেশন ডেটা লোড করছি এবং সংরক্ষণ করছি এবং এটি একটি উদাহরণ ভেরিয়েবলের মধ্যে সংরক্ষণ করছি (এটি আসলে একটি বস্তু-গ্রাফ)।

অ্যাপ্লিকেশনটি লোড হয়ে গেলে, এটি মেইনওয়াইন্ডো.এক্সিব লোড করে, যার একটি নেভিগেশনকন্ট্রোলার রয়েছে, যার পরিবর্তে একটি রুটভিউ কনট্রোলার রয়েছে। রুটভিউ নিয়ন্ত্রণকারী nibNameসম্পত্তি রুটভিউতে নির্দেশ করে (আমার আসল নিয়ামক শ্রেণি)।

আমার ক্লাসে, আমি -applicationDidFinishLoading:পদ্ধতিটিতে আমি যে বস্তুটি তৈরি করেছি তা উল্লেখ করতে চাই, যাতে আমি এটির একটি উল্লেখ পেতে পারি get

কেউ আমাকে কীভাবে তা করতে পারেন? আমি জানি যে আমি যে প্রোগ্রামগুলিকে প্রোগ্রামগতভাবে তৈরি করেছি সেগুলির মধ্যে কীভাবে রেফারেন্স করতে পারি, তবে মধ্যম পদক্ষেপটি এনআইবি ফাইলের মধ্যে থেকে করা হয়ে গিয়েছিল আমি ফিরে আসার পথে থ্রেড করতে পারব না।

উত্তর:


204

ভেরিয়েবলের জন্য (সাধারণত মডেল ডেটা স্ট্রাকচার) যা অ্যাপে যে কোনও জায়গায় আমার অ্যাক্সেস করা দরকার, তাদের আপনার অ্যাপডেলিগেট ক্লাসে ঘোষণা করুন। আপনার যখন এটি উল্লেখ করতে হবে:

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
//and then access the variable by appDelegate.variable 

7
আমি এটিকে ভোট দিয়েছি কারণ আপনি কাস্ট যোগ করেছেন, আপনার নিজের ধরণের অ্যাপডেলিগেট কাস্ট করা দরকার যাতে আপনি সেট করা নিজস্ব বৈশিষ্ট্যগুলি দেখতে পান can আপনি "অ্যাপডেলিগেট" তে কাস্ট না করে এটিকে আরও পরিষ্কার করার জন্য সম্পাদনা করতে পারেন ...
কেন্ডাল হেলস্টেটার জেলনার

অ্যাপের প্রতিনিধিটির নাম বা এর সদস্যদের কোনও উল্লেখ না করেই কি রুট ভিউ নিয়ন্ত্রণকারী অ্যাক্সেস করার কোনও উপায় আছে? (আমি কিছু পোর্টেবল কোড লিখতে চাই যার জন্য রুট ভিউ কন্ট্রোলারের প্রয়োজন
needs

এসকে 9, প্রতিটি আইওএস অ্যাপের একটি অ্যাপ্লিকেশন থাকতে হবে, তাই কোডটি বহনযোগ্য হবে!
ড্যানিয়েল

16

যদি আমি আপনার প্রশ্নটি বুঝতে পারি তবে আপনি কি আপনার অ্যাপডেলিগেট অবজেক্টে সদস্য ভেরিয়েবল / বৈশিষ্ট্যগুলি উল্লেখ করতে চান? সবচেয়ে সহজ উপায় হ'ল [[ইউআইএএপ্লিকেশন শেয়ারড অ্যাপ্লিকেশন] ডেলিগেট] আপনার অবজেক্টের কোনও রেফারেন্স ফিরিয়ে আনতে।

উইন্ডো নামক কোনও সম্পত্তি পেলে আপনি এটি করতে পারেন:

UIWindow   *mainWindow = [[[UIApplication sharedApplication] delegate] window];
//do something with mainWindow

11

আইওএস 4.0 এবং এর জন্য উপযুক্ত সংজ্ঞায়িত পোর্টেবল বিকল্প এখানে রয়েছে:

UIApplication *myApplication = [UIApplication sharedApplication];
UIWindow *mainWindow = [myApplication keyWindow];
UIViewController *rootViewController = [mainWindow rootViewController];

বা, এক লাইনে,

UIViewController *rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];

উইন্ডোটির rootViewControllerসম্পত্তি সেট করতে ভুলবেন না (আইবিতে বলুন) বা এটি জ্যাক করবে।


2

একটি ম্যাক্রো সংজ্ঞায়িত করুন এবং এটি যে কোনও জায়গায় ব্যবহার করুন!

#define appDelegateShared ((AppDelegate *)[UIApplication sharedApplication].delegate)

আমার কোডে: -

UIViewController *rootViewController = appDelegateShared.window.rootViewController;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.