নতুন পদ্ধতিটি হ'ল:
[self dismissViewControllerAnimated:NO completion:nil];
মডেল শব্দটি সরানো হয়েছে; এটি উপস্থাপনকারী এপিআই কলটির জন্য যেমন হয়েছে:
[self presentViewController:vc animated:NO completion:nil];
কারণগুলি নিয়ে ডাব্লুডাব্লুডিসি সেশন 236 - আইওএস ভিডিওতে দেখুন নিয়ন্ত্রণের বিবর্তন সম্পর্কে আলোচনা করা হয়েছিল । মূলত, এই এপিআই দ্বারা উপস্থাপিত ভিউ কন্ট্রোলাররা আর সবসময় মডেল হয় না এবং যেহেতু তারা একটি সমাপ্তি হ্যান্ডলার যুক্ত করছিল এটির নামকরণের জন্য এটি ভাল সময় ছিল।
মার্কের মন্তব্যের জবাবে:
৪.৩ বা তার বেশি ডিভাইসগুলির সমর্থন করার সর্বোত্তম উপায় কী? নতুন পদ্ধতি আইওএস 4 এ কাজ করে না, তবুও পুরানো পদ্ধতিটি আইওএস 6-এ অবনতিযুক্ত।
আমি বুঝতে পারি যে এটি প্রায় একটি পৃথক প্রশ্ন, তবে আমি মনে করি এটি উল্লেখ করার মতো যেহেতু প্রতি 3 বছর পর পর তাদের সমস্ত ডিভাইস আপগ্রেড করার জন্য প্রত্যেকেরই অর্থ নেই তাই আমাদের অনেকেরই কিছু পুরানো (5.0 পূর্ববর্তী) ডিভাইস রয়েছে। তবুও, এটি বলার জন্য যতই কষ্ট পেলাম, আপনার এটি বিবেচনা করা উচিত যে এটি 5.0 এর নিচে লক্ষ্য করার মতো কিনা। 5.0 এর নীচে অনেকগুলি নতুন এবং দুর্দান্ত এপিআই উপলব্ধ নেই। এবং অ্যাপল ক্রমাগত তাদের লক্ষ্য করা শক্ত করে তুলছে; উদাহরণস্বরূপ এক্সকোড ৪.৪ থেকে আর্মভি support সমর্থন বাদ দেওয়া হয়েছে।
5.0 এর নীচে লক্ষ্য করতে (যতক্ষণ না সমাপ্তি ব্লক শূন্য থাকে) কেবল হ্যান্ডি respondsToSelector
: পদ্ধতিটি ব্যবহার করুন ।
if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){
[self presentViewController:test animated:YES completion:nil];
} else {
[self presentModalViewController:test animated:YES];
}
মার্কের অন্য মন্তব্যের জবাবে:
এটি অনেকটা হতে পারে যদি আমার অ্যাপ্লিকেশনটিতে বিবৃতিগুলি থাকে! ... আমি এই কোডটি এনক্যাপসুলেটেড এমন একটি বিভাগ তৈরি করার কথা ভাবছিলাম, ইউআইভিউকন্ট্রোলারের উপর একটি বিভাগ তৈরি করা আমাকে প্রত্যাখ্যান করবে?
এবং সম্পূর্ণ উত্তম থেকে একটি:
... ম্যানুয়ালি কারণ দেওয়ার কোনও উপায় আছে যে সংকলক সতর্কতাটি উপস্থাপন করবে না?
প্রথমত, না, এর UIViewController
মধ্যে এবং নিজেই একটি বিভাগ তৈরি করা আপনার অ্যাপ্লিকেশনটিকে প্রত্যাখ্যান করবে না; সেই বিভাগ পদ্ধতিটি প্রাইভেট এপিআই বা অনুরূপ কিছু না বলে।
একটি বিভাগ পদ্ধতি এই জাতীয় কোডের জন্য অত্যন্ত ভাল জায়গা is এছাড়াও, যেহেতু হ্রাসপ্রাপ্ত এপিআইতে কেবল একটি কল থাকবে, কেবলমাত্র একটি সংকলক সতর্কতা থাকবে।
ফুল ডেসেন্টের মন্তব্যে (প্রশ্ন) মোকাবিলা করতে, হ্যাঁ আপনি ম্যানুয়ালি সংকলক সতর্কতাগুলি দমন করতে পারেন। সেই একই বিষয়ে এসওর একটি উত্তরের লিঙ্ক এখানে । সংকলক সতর্কতা দমন করার জন্য একটি বিভাগ পদ্ধতিটিও দুর্দান্ত জায়গা, যেহেতু আপনি কেবলমাত্র এক জায়গায় সতর্কতাটি দমন করছেন। আপনি অবশ্যই এই সংকলক উইলি-নিলির নিরবতা ঘুরে দেখতে চান না।
আমি যদি এর জন্য একটি সাধারণ বিভাগের পদ্ধতি লিখি তবে এটি এমন কিছু হতে পারে:
@implementation UIViewController (NJ_ModalPresentation)
-(void)nj_presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion{
NSAssert(completion == nil, @"You called %@ with a non-nil completion. Don't do that!",NSStringFromSelector(_cmd));
if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){
[self presentViewController:viewControllerToPresent animated:flag completion:completion];
} else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
[self presentModalViewController:viewControllerToPresent animated:flag];
#pragma clang diagnostic pop
}
}
@end