इस लेख में हम सीखेंगे कि हमारे एप्लिकेशन में कस्टम ऑब्जेक्ट को कैसे संग्रहीत किया जाए, लेकिन इससे पहले कि आप कस्टम ऑब्जेक्ट को संग्रहीत करना सीखें, आइए देखें कि कस्टम ऑब्जेक्ट क्या हैं?
एक कस्टम ऑब्जेक्ट कोई भी क्लास या संरचना या कोई अन्य डेटा है जो 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")
अब हमने आर्काइव्ड ऑब्जेक्ट को कोर डेटा में सफलतापूर्वक सहेज लिया है, अब समय है कि हम इसे अनआर्काइव करें और प्रिंट करें।
कस्टम ऑब्जेक्ट को डिकोड करना
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)
}
}
अब अंतिम प्रिंट स्टेटमेंट पर ब्रेकपॉइंट डालें और यह कोड चलाएं, जब निष्पादित हो तो यह कमांड चलाएं:
po decodedPeople.first?.name
जिसका परिणाम होगा:
Optional<String> - some: "P1"