আমার ছোট আইপ্যাড অ্যাপ্লিকেশনটিতে আমার কাছে একটি "স্যুইচ ভাষা" ফাংশন রয়েছে যা পর্যবেক্ষক ব্যবহার করে uses প্রতিটি দেখার নিয়ামক এর সময়কালে আমার পর্যবেক্ষকের সাথে নিজেকে নিবন্ধিত করে viewDidLoad:
।
- (void)viewDidLoad
{
[super viewDidLoad];
[observer registerObject:self];
}
যখন ব্যবহারকারী "ভাষা পরিবর্তন করুন" বোতামটি হিট করে, তখন নতুন ভাষাটি আমার মডেলটিতে সংরক্ষণ করা হয় এবং পর্যবেক্ষককে অবহিত করা হয় এবং updateUi:
তার নিবন্ধিত বস্তুগুলিতে একজন নির্বাচককে কল করে।
এটি আমার খুব ভালভাবে কাজ করে, যখন আমার কোনও ট্যাববারকন্ট্রোলারে নিয়ন্ত্রক থাকে except এটি কারণ যখন ট্যাব বারটি লোড হয়, তখন এটি চাইল্ড কন্ট্রোলারদের কাছ থেকে ভিউগুলি আরম্ভ না করেই ট্যাব আইকনগুলি নিয়ে আসে, তাই viewDidLoad:
বলা হয় না, সুতরাং সেই দৃশ্য নিয়ন্ত্রণকারীরা ভাষা পরিবর্তনের বিজ্ঞপ্তিগুলি গ্রহণ করে না। এই কারণে, আমি আমার registerObject:
কলগুলি init
পদ্ধতিতে সরিয়ে নিয়েছি ।
ফিরে যখন আমি viewDidLoad:
আমার পর্যবেক্ষকের সাথে নিবন্ধন করতাম, আমি viewDidUnload:
নিবন্ধন করতাম । যেহেতু আমি এখন নিবন্ধভুক্ত করছি init
, তাই এটি নিবন্ধভুক্ত করা অনেক অর্থবোধ করে dealloc
।
তবে এখানে আমার সমস্যা। আমি যখন লিখি:
- (void) dealloc
{
[observer unregisterObject:self];
[super dealloc];
}
আমি এই ত্রুটি পেয়েছি:
এআরসি 'ডেলোক'-এর স্পষ্ট বার্তা প্রেরণ নিষিদ্ধ করেছে
যেহেতু [super dealloc]
সুপারক্লসগুলি সঠিকভাবে পরিষ্কার হওয়া নিশ্চিত করার জন্য আমাকে কল করা দরকার তবে এআরসি এটি নিষিদ্ধ করে, এখন আমি আটকে আছি। আমার অবজেক্টটি যখন মারা যাচ্ছে তখন অবহিত হওয়ার আর কি উপায় আছে?