এই নিবন্ধে আমরা আমাদের অ্যাপ্লিকেশনে কাস্টম অবজেক্টগুলি কীভাবে সংরক্ষণ করতে হয় তা শিখব, তবে আপনি কীভাবে কাস্টম অবজেক্ট সংরক্ষণ করবেন তা শেখার আগে আসুন দেখে নেওয়া যাক কাস্টম অবজেক্ট কী?
একটি কাস্টম অবজেক্ট হল যে কোন ক্লাস বা স্ট্রাকচার বা অন্য কোন ডাটা যেটা নেটিভ ডাটা টাইপ যেমন Int, Double, String ইত্যাদি নয়। NSUserDefaults-এ ডেটা স্টোর করা একটি তিন ধাপ প্রক্রিয়া।
কাস্টম অবজেক্ট তৈরি করা হচ্ছে
আমরা একটি কাস্টম শ্রেণীর ব্যক্তি তৈরি করব যার একটি বয়স পরিবর্তনশীল এবং নাম পরিবর্তনশীল হবে৷
৷class Person: NSObject, NSCoding { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } required convenience init(coder aCoder: NSCoder) { let name = aCoder.decodeObject(forKey: "name") as! String let age = aCoder.decodeInteger(forKey: "age") self.init(name: name, age: age) } func encode(with acoder: NSCoder) { acoder.encode(age,forKey: "age") acoder.encode(name,forKey: "name") } }
কাস্টম অবজেক্ট এনকোডিং
এই ধাপে আমরা ব্যক্তি অবজেক্টের একটি অ্যারে তৈরি করব, এটিকে মানুষ বলব এবং র্যান্ডম ডেটা দিয়ে শুরু করব। একবার আমরা সেই বস্তুটি তৈরি করলে আমরা NSKeyedArchiver ব্যবহার করব এই বস্তুটিকে সংরক্ষণ করতে এবং পরে ব্যবহারকারীর ডিফল্টে সংরক্ষণ করতে।
let people = [ Person.init(name: "P1", age: 1), Person.init(name: "P2", age: 2), Person.init(name: "P3", age: 3), ] let encoded = NSKeyedArchiver.archivedData(withRootObject: people) UserDefaults.standard.set(encoded, forKey: "encodedData")
এখন আমরা মূল ডেটাতে আর্কাইভ করা বস্তুটিকে সফলভাবে সংরক্ষণ করেছি, এখন সময় এসেছে সেই বস্তুটিকে আর্কাইভ করে মুদ্রণ করার।
কাস্টম অবজেক্টের ডিকোডিং
NSKeyedArchiver-এর মতোই আমাদের কাছে NSKeyedUnarchiver আছে যা আমরা এই বস্তুটিকে আনআর্কাইভ করতে ব্যবহার করব।
let decoded = UserDefaults.standard.object(forKey: "encodedData") as! Data let decodedPeople = NSKeyedUnarchiver.unarchiveObject(with: decoded) as! [Person]
এখন এই "ডিকোডেড পিপল" অবজেক্টটিতে আমরা দ্বিতীয় ধাপে তৈরি করা অবজেক্ট ধারণ করেছি।
আমরা at অবজেক্ট দিয়ে কাঙ্খিত অপারেশন করতে পারি। এখন দেখা যাক ভিউকন্ট্রোলার ফাইলটি কেমন দেখায়;
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let people = [ Person.init(name: "P1", age: 1), Person.init(name: "P2", age: 2), Person.init(name: "P3", age: 3), ] let encoded = NSKeyedArchiver.archivedData(withRootObject: people) UserDefaults.standard.set(encoded, forKey: "encodedData") print("data decoded, encoding now") let decoded = UserDefaults.standard.object(forKey: "encodedData") as! Data let decodedPeople = NSKeyedUnarchiver.unarchiveObject(with: decoded) as! [Person] print(decodedPeople) } }
এখন শেষ মুদ্রণ বিবৃতিতে একটি বিরতি পয়েন্ট রাখুন এবং এই কোডটি চালান, যখন কার্যকর করা হয় তখন এই কমান্ডটি চালান
po decodedPeople.first?.name
যার ফলাফল হবে
Optional<String> - some : "P1"
শেষ পর্যন্ত এইরকম দেখায়৷
৷