NSUserDefaults-এ কাস্টম অবজেক্ট স্টোরেজ
এই আর্টিকেলে আমরা শিখব কীভাবে আমাদের অ্যাপ্লিকেশনে কাস্টম অবজেক্ট স্টোর করব, কিন্তু তার আগে জানি কাস্টম অবজেক্ট কী।
কাস্টম অবজেক্ট হলো যেকোনো ক্লাস বা স্ট্রাকচার বা অন্যান্য ডেটা যা নেটিভ ডেটা টাইপ নয় (Int, Double, String ইত্যাদি)। NSUserDefaults-এ ডেটা স্টোর করা তিন ধাপের প্রক্রিয়া।
১. কাস্টম অবজেক্ট তৈরি
Person নামে একটি কাস্টম ক্লাস তৈরি করব যাতে age এবং name ভেরিয়েবল থাকবে।
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")
}
}
২. কাস্টম অবজেক্ট এনকোড করা
এই ধাপে Person অবজেক্টের একটি অ্যারে তৈরি করব, নাম দেব people এবং র্যান্ডম ডেটা দিয়ে ইনিশিয়ালাইজ করব। অবজেক্ট তৈরি হলে NSKeyedArchiver ব্যবহার করে আর্কাইভ করব এবং পরে UserDefaults-এ স্টোর করব।
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")
আমরা সফলভাবে আর্কাইভড অবজেক্ট কোর ডেটায় (UserDefaults) সেভ করলাম, এখন আনআর্কাইভ করে প্রিন্ট করব।
৩. কাস্টম অবজেক্ট ডিকোড করা
NSKeyedArchiver-এর মতো NSKeyedUnarchiver আছে যা আমরা আনআর্কাইভ করতে ব্যবহার করব।
let decoded = UserDefaults.standard.object(forKey: "encodedData") as! Data let decodedPeople = NSKeyedUnarchiver.unarchiveObject(with: decoded) as! [Person]
এখন "decodedPeople" অবজেক্টে সেকেন্ড স্টেপে তৈরি অবজেক্টটি রয়েছে। আমরা এই অবজেক্ট দিয়ে মনোনিবেশিত অপারেশন পারফর্ম করতে পারি।
ViewController ফাইল কেমন দেখাবে:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
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)
}
}
লাস্ট প্রিন্ট স্টেটমেন্টে ব্রেকপয়েন্ট দিয়ে রান করুন,.Execute করুন:
po decodedPeople.first?.name
ফলাফল:
Optional- some : "P1"
শেষে এরা যেন দেখাবে:
