तो मैं इस ट्यूटोरियल के माध्यम से जा रहा हूं, और आखिरकार मैंने यह पता लगाया है कि एनएससीओडी का उपयोग करके किसी ऑब्जेक्ट को कैसे संग्रहीत किया जाए, और इसे फाइल सिस्टम से फिर से शुरू करने के लिए प्रारंभिक प्रारंभकर्ता के साथ शुरू किया जाए।एनएससीओडी-अनुपालन होने का क्या अर्थ है?
// To encode the object in the first place
func encode(with aCoder: NSCoder) {
aCoder.encode(name, forKey: "name")
}
// To 're-initialize' the object
required init?(coder aDecoder: NSCoder) {
self.name = aDecoder.decodeObject(forKey: "name") as! String
super.init()
}
हालांकि, मैं अभी भी इस बारे में थोड़ा अनिश्चित हूं कि यह पूरी प्रक्रिया उच्च स्तर पर कैसे काम करती है। कृपया मुझे बताएं कि मेरी सोच गलत है।
1) अपने वस्तु NSCoding प्रोटोकॉल को गोद ले, तो आप, आदेश में एक NSCoder वस्तु समारोह के माध्यम से पारित किया है और एक 'एनकोड' विधि को करने के लिए एनकोड (:) समारोह के साथ उपयोग कर सकते हैं अपने ऑब्जेक्ट के उदाहरण संपत्ति गुजर (जो एक ऑब्जेक्ट स्वयं है) पहले तर्क के रूप में, और एक स्ट्रिंग दूसरे मान के रूप में एक कुंजी का प्रतिनिधित्व करता है।
2) यह एक पुनरावर्ती प्रक्रिया है, इसलिए अनिवार्य रूप से, आप अपने ऑब्जेक्ट की आवृत्ति संपत्ति (यानी नाम) को पारित करने का कारण यह है कि वह संपत्ति (जो वस्तु है) को एन्कोड संदेश भेजा जा सकता है, और इसी तरह और जब तक यह अब एनएससीओडीडी गोद लेने तक नहीं पहुंच जाता तब तक लाइन को आगे बढ़ाएं।
3) एडीकोडर ऑब्जेक्ट चीजों को भी डीकोड कर सकता है, इसलिए अपनी कस्टम ऑब्जेक्ट की शुरुआत के बाद, आप जो भी ऑब्जेक्ट इस्तेमाल करते हैं, उसके लिए जो ऑब्जेक्ट सेट किया गया था, उसे डीकोड करने के लिए आप फॉबल प्रारंभकर्ता का उपयोग करना चाहेंगे।
यहाँ मैं वास्तव में समझ में नहीं आता क्या ...
कैसे aDecoder वस्तु जो व्यक्ति वस्तु कुंजियों का सेट के लिए उपयोग करने के लिए पता है क्या है? उदाहरण के लिए, मान लें कि मेरे पास 10 कुत्ते ऑब्जेक्ट उदाहरण हैं। जब सिस्टम एक डीकोडर से गुज़रता है, और मैं उस पर decodeObject विधि का उपयोग करता हूं, और यह कुंजी द्वारा उस डीकोडेड ऑब्जेक्ट के मूल्य पर self.name सेट करता है, तो एक डिकोडर कैसे जानता है कि इस कुत्ते का नाम "जैक" के रूप में सहेजा गया था, और नहीं "जोड़ी" जैसे दुर्घटना से दूसरे कुत्ते के उदाहरणों में से एक को पकड़ो?
दूसरे शब्दों में, एक बार जब आप किसी ऑब्जेक्ट की गुणों को एन्कोड करते हैं, तो फाइल सिस्टम ऑब्जेक्ट इंस्टेंस को रखने के लिए कैसे जानता है ए गुणों को ऑब्जेक्ट इंस्टेंस बी से अलग करता है, इस प्रकार ऐसा करने में, जब ऐप को बूट किया जाता है और ऑब्जेक्ट प्राप्त होता है शुरू किया, यह केवल वस्तु ए गुणों को पकड़ता है?
धन्यवाद
उसमें, मैं जोड़ता हूं कि ऑब्जेक्ट ग्राफ़ श्रेणीबद्ध रूप से एक रूट ऑब्जेक्ट से अवरुद्ध हो जाता है। यदि उस ऑब्जेक्ट ग्राफ़ में लूप होते हैं, तो यह केवल एक बार लिखा जाता है, और बाद के स्पॉट जहां उस ऑब्जेक्ट का संदर्भ दिया जाता है, इसके बजाय ऑब्जेक्ट की पहली प्रतिलिपि के पीछे संदर्भ होते हैं। – dgatwood