সুতরাং দেখা যাচ্ছে যে যেহেতু অ্যানোবজেক্টটি আইডির আধ্যাত্মিক উত্তরসূরি, আপনি যে কোনও বার্তা যেকোনওবজেক্টে কল করতে পারেন। এটি আইডিতে একটি বার্তা প্রেরণের সমতুল্য। যথেষ্ট ঠিক পরিষ্কার. তবে এখন আমরা ধারণাটিতে যুক্ত করেছি যে সমস্ত পদ্ধতি যেকোনওবজেক্টে alচ্ছিক , এবং আমাদের এমন কিছু আছে যা আমরা কাজ করতে পারি।
উপরের দিক থেকে প্রদত্ত, আমি আশাবাদী যে আমি কেবলমাত্র ইউআইএপ্লিকেশন.শ্রেড অ্যাপ্লিকেশন () অনিওবজেক্টে ফেলে দিতে পারি, তারপরে পদ্ধতি স্বাক্ষরের সমান একটি ভেরিয়েবল তৈরি করতে পারি, thatচ্ছিক পদ্ধতিতে সেই ভেরিয়েবলটি সেট করতে পারি, তারপরে ভেরিয়েবলটি পরীক্ষা করতে পারি। এটি কাজ করে বলে মনে হচ্ছে না। আমার ধারণাটি হ'ল আইওএস 8.0 এসডিকে বিপরীতে সংকলিত হওয়ার সময়, সংকলকটি জানে যে কোথায় সেই পদ্ধতিটি হওয়া উচিত বলে মনে হয় , তাই এটি মেমরির অনুসন্ধানে এটিকে সর্বোত্তম করে তোলে। আমি ভেরিয়েবলটি পরীক্ষা করার চেষ্টা না করা অবধি সবকিছু ঠিকঠাক কাজ করে, যার কোন স্থানে আমি একটি EXC_BAD_ACCESS পাই।
তবে, একই ডাব্লুডব্লিউডিসির আলোচনায় যেখানে আমি সমস্ত পদ্ধতির mচ্ছিক সম্পর্কে রত্ন খুঁজে পেয়েছি, তারা একটি optionচ্ছিক পদ্ধতিতে কল করতে Oচ্ছিক চেইন ব্যবহার করে - এবং এটি কার্যকর বলে মনে হচ্ছে। খোঁড়া অংশটি হ'ল আপনাকে আসলে পদ্ধতিটি কল করার চেষ্টা করতে হবে যাতে এটি বিদ্যমান কিনা তা জানার জন্য, যা বিজ্ঞপ্তিগুলির জন্য নিবন্ধকরণের ক্ষেত্রে একটি সমস্যা কারণ আপনি তৈরি করার আগে এই পদ্ধতিটি বিদ্যমান কিনা তা নির্ধারণ করার চেষ্টা করছেন UIUserNotificationsSettings অবজেক্ট। দেখে মনে হচ্ছে যে পদ্ধতিটি শূন্যের সাথে ডাকলেও ঠিক আছে, সুতরাং যে সমাধানটি আমার পক্ষে কাজ করছে বলে মনে হচ্ছে তা হ'ল:
var ao: AnyObject = UIApplication.sharedApplication()
if let x:Void = ao.registerUserNotificationSettings?(nil) {
// It's iOS 8
var types = UIUserNotificationType.Badge | UIUserNotificationType.Sound | UIUserNotificationType.Alert
var settings = UIUserNotificationSettings(forTypes: types, categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
} else {
// It's older
var types = UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound | UIRemoteNotificationType.Alert
UIApplication.sharedApplication().registerForRemoteNotificationTypes(types)
}
এ সম্পর্কিত অনেকগুলি অনুসন্ধানের পরে, মূল তথ্যটি এই ডাব্লুডাব্লুডিসি আলাপ থেকে এসেছে https://developer.apple.com/videos/wwdc/2014/#407 থেকে ঠিক "প্রোটোকলগুলিতে ptionচ্ছিক পদ্ধতিগুলি" বিভাগের মধ্যবর্তী অংশে
এক্সকোড 6.1 বিটাতে উপরের কোডটি আর কাজ করে না, নীচের কোডটি কাজ করে:
if UIApplication.sharedApplication().respondsToSelector("registerUserNotificationSettings:") {
// It's iOS 8
var types = UIUserNotificationType.Badge | UIUserNotificationType.Sound | UIUserNotificationType.Alert
var settings = UIUserNotificationSettings(forTypes: types, categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
} else {
// It's older
var types = UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound | UIRemoteNotificationType.Alert
UIApplication.sharedApplication().registerForRemoteNotificationTypes(types)
}