এই প্রশ্নটি সব সময় উঠে আসে।
একটি পরামর্শ হ'ল ডেটা কনটেইনার সিঙ্গলটন তৈরি করা: এমন একটি বস্তু যা আপনার অ্যাপ্লিকেশনটির জীবনে একবারে এবং একবারে তৈরি হয়ে যায় এবং আপনার অ্যাপ্লিকেশনটির জন্য স্থায়ী হয়।
যখন আপনার কাছে বিশ্বব্যাপী অ্যাপ্লিকেশন ডেটা রয়েছে তখন আপনার অ্যাপ্লিকেশনটিতে বিভিন্ন শ্রেণীর জন্য উপলব্ধ / সংশোধনযোগ্য হতে হবে তখন এই পদ্ধতির জন্য উপযুক্ত।
ভিউ কন্ট্রোলারগুলির মধ্যে ওয়ান-ওয়ে বা দ্বি-মুখী লিঙ্ক স্থাপনের মতো অন্যান্য পন্থাগুলি আপনি যেখানে পরিস্থিতি নিয়ন্ত্রণকারীদের মধ্যে সরাসরি তথ্য / বার্তা প্রেরণ করছেন সেই পরিস্থিতিতে উপযুক্ত better
(অন্যান্য বিকল্পের জন্য নীচে এনএইচগ্রিফের উত্তর দেখুন))
ডেটা কন্টেইনার সিঙ্গলটনের সাহায্যে আপনি আপনার শ্রেণিতে এমন একটি সম্পত্তি যুক্ত করুন যা আপনার সিঙ্গলটনের একটি রেফারেন্স সঞ্চয় করে এবং তারপরে আপনার যে কোনও সময় অ্যাক্সেসের প্রয়োজন হলে সেই সম্পত্তিটি ব্যবহার করুন।
আপনি আপনার সিঙ্গেলটন সেট আপ করতে পারেন যাতে এটির বিষয়বস্তুগুলি ডিস্কে সংরক্ষণ করে যাতে আপনার অ্যাপের অবস্থা লঞ্চগুলির মধ্যে স্থির থাকে।
আপনি কীভাবে এটি করতে পারেন তা প্রদর্শন করে আমি গিটহাবে একটি ডেমো প্রকল্প তৈরি করেছি। লিঙ্কটি এখানে:
গিটহাবের সুইফটডাটা কন্টেইনারসিংটন প্রকল্পটি
এখানে সেই প্রকল্পটি থেকে পুনরায় পড়ুন:
সুইফটডাটা কন্টেইনারসিংলেটন
অ্যাপ্লিকেশন স্থিতি সংরক্ষণ করতে এবং বস্তুর মধ্যে ভাগ করে নেওয়ার জন্য ডেটা কন্টেইনার সিঙ্গলটন ব্যবহারের একটি প্রদর্শন ration
DataContainerSingletonবর্গ প্রকৃত Singleton হয়।
এটি sharedDataContainerসিঙ্গলটনের একটি রেফারেন্স সংরক্ষণ করতে একটি স্ট্যাটিক ধ্রুবক ব্যবহার করে।
সিঙ্গলটনে অ্যাক্সেস করতে সিনট্যাক্সটি ব্যবহার করুন
DataContainerSingleton.sharedDataContainer
নমুনা প্রকল্পটি ডেটা ধারকটিতে 3 টি বৈশিষ্ট্য নির্ধারণ করে:
var someString: String?
var someOtherString: String?
var someInt: Int?
someIntডেটা ধারক থেকে সম্পত্তি লোড করতে , আপনি এই জাতীয় কোড ব্যবহার করুন:
let theInt = DataContainerSingleton.sharedDataContainer.someInt
কিছুতে কোনও মান সংরক্ষণ করতে, আপনি সিনট্যাক্সটি ব্যবহার করবেন:
DataContainerSingleton.sharedDataContainer.someInt = 3
ডেটা কন্টেইনারসিংলেটনের initপদ্ধতিটি এর জন্য একটি পর্যবেক্ষক যুক্ত করে UIApplicationDidEnterBackgroundNotification। কোডটি এর মতো দেখাচ্ছে:
goToBackgroundObserver = NSNotificationCenter.defaultCenter().addObserverForName(
UIApplicationDidEnterBackgroundNotification,
object: nil,
queue: nil)
{
(note: NSNotification!) -> Void in
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject( self.someString, forKey: DefaultsKeys.someString)
defaults.setObject( self.someOtherString, forKey: DefaultsKeys.someOtherString)
defaults.setObject( self.someInt, forKey: DefaultsKeys.someInt)
defaults.synchronize()
}
পর্যবেক্ষক কোডে এটি ডেটা ধারকটির বৈশিষ্ট্যগুলিতে সংরক্ষণ করে NSUserDefaults। আপনি NSCodingস্টেটের ডেটা সংরক্ষণের জন্য কোর ডেটা বা অন্যান্য বিভিন্ন পদ্ধতিও ব্যবহার করতে পারেন ।
ডেটা কন্টেইনারসিংটনের initপদ্ধতিটিও এর বৈশিষ্ট্যগুলির জন্য সংরক্ষিত মান লোড করার চেষ্টা করে।
আর ডি পদ্ধতির সেই অংশটি দেখতে এরকম দেখাচ্ছে:
let defaults = NSUserDefaults.standardUserDefaults()
someString = defaults.objectForKey(DefaultsKeys.someString) as! String?
someOtherString = defaults.objectForKey(DefaultsKeys.someOtherString) as! String?
someInt = defaults.objectForKey(DefaultsKeys.someInt) as! Int?
এনএসইউসারডেফল্টগুলিতে মান লোড এবং সংরক্ষণের কীগুলি স্ট্রিং ধ্রুবক হিসাবে সংরক্ষণ করা হয় যা স্ট্রাক্টের অংশ, এটি এর DefaultsKeysমতো সংজ্ঞায়িত হয়:
struct DefaultsKeys
{
static let someString = "someString"
static let someOtherString = "someOtherString"
static let someInt = "someInt"
}
আপনি এই ধ্রুবকগুলির মধ্যে একটির মতো উল্লেখ করুন:
DefaultsKeys.someInt
ডেটা কনটেইনার সিঙ্গলটন ব্যবহার করে:
এই নমুনা অ্যাপ্লিকেশনটি ডেটা কন্টেইনার সিঙ্গলটনের ত্রিভুজ ব্যবহার করে।
দু'জন ভিউ কন্ট্রোলার রয়েছে। প্রথমটি ইউআইভিউকন্ট্রোলারের একটি কাস্টম সাবক্লাস ViewControllerএবং দ্বিতীয়টি ইউআইভিউকন্ট্রোলারের একটি কাস্টম সাবক্লাস SecondVC।
উভয় দর্শনীয় কন্ট্রোলারের একটি পাঠ্য ক্ষেত্র থাকে এবং উভয়ই someIntতাদের viewWillAppearপদ্ধতিতে তথ্য ধারক সিঙ্গলল্টনের সম্পত্তি থেকে পাঠ্য ক্ষেত্রের মধ্যে একটি মান লোড করে এবং উভয়ই পাঠ্য ক্ষেত্র থেকে বর্তমান মানটিকে ডেটা ধারকটির 'কিছুটা' সংরক্ষণ করে।
পাঠ্য ক্ষেত্রে মানটি লোড করার কোডটি viewWillAppear:পদ্ধতিতে রয়েছে:
override func viewWillAppear(animated: Bool)
{
let value = DataContainerSingleton.sharedDataContainer.someInt ?? 0
textField.text = "\(value)"
}
ব্যবহারকারী-সম্পাদিত মানটিকে ডেটা ধারকটিতে ফিরিয়ে আনার কোডটি দেখুন নিয়ন্ত্রকের textFieldShouldEndEditingপদ্ধতিতে রয়েছে:
func textFieldShouldEndEditing(textField: UITextField) -> Bool
{
DataContainerSingleton.sharedDataContainer.someInt = textField.text!.toInt()
return true
}
আপনার ভিউউইল অ্যাপ্লায়ারটি ভিউডিল অ্যাপের পরিবর্তে আপনার ইউজার ইন্টারফেসে মানগুলি লোড করা উচিত যাতে প্রতিবারের নিয়ামক প্রদর্শনের সময় আপনার ইউআই আপডেট হয়।