2009-04-30 6 views
8

राज्यों के ऊपर विषय में मेरे प्रश्न के रूप में, आपको यह कहने के लिए आम तौर पर क्या आवश्यकताएं मिलती हैं "ठीक है, मुझे encodeWithCoder: और initWithCoder: इसके लिए तत्कालता की आवश्यकता है"? आम तौर पर आप ऑब्जेक्ट स्टेटस को NSUserDefaults पर लिख सकते हैं, इसलिए जब आप विशेषज्ञों को एक बनाम दूसरे का उपयोग करने का फैसला करते हैं तो मैं उत्सुक हूं?आप एन्कोडविथकोडर का उपयोग कब करते हैं: और initWithCoder: आईफोन पर?

उत्तर

9

उपयोगकर्ता डिफ़ॉल्ट, मूल रूप से, एक संपत्ति सूची है। संपत्ति सूचियां जेएसओएन के समान होती हैं और केवल विशिष्ट प्रकार के डेटा स्टोर कर सकती हैं - एनएसएसटींग, एनएसएनंबर, एनएसडीटा, एनएसडीएटी, एनएसएआरएआरई, एनएस डिक्शनरी। यदि आप उपयोगकर्ता डिफ़ॉल्ट में कुछ और स्टोर करने का प्रयास करते हैं, तो आपको अपवाद मिलेगा। संपत्ति सूचियां भी मनमाने ढंग से ऑब्जेक्ट ग्राफ, केवल पेड़ को संभाल नहीं सकती हैं।

आप हमेशा अपनी कस्टम स्थिति ले सकते हैं और इसे एक संपत्ति-सूची संगत डेटा संरचना में परिवर्तित कर सकते हैं, फिर इसे उपयोगकर्ता डिफ़ॉल्ट में संग्रहीत कर सकते हैं; लेकिन फिर आप मूल रूप से ऑब्जेक्ट सीरियलाइजेशन तंत्र को कार्यान्वित कर रहे हैं, और आप एनएसएआरसीवर द्वारा पहले से प्रदान किए गए अधिक शक्तिशाली व्यक्ति का भी उपयोग कर सकते हैं।

10

initWithCoder: ओएस द्वारा उपयोग किया जाता है जब एक्सआईबी फाइलों को अन-संग्रहित करता है; यदि आप बारीकी से देखते हैं, तो आप देखेंगे कि initWithFrame: आपके XIB में बनाए गए विचारों के लिए नहीं कहा जाता है; उनके पास initWithCoder: बदलेगा।

+0

हाय बेन, जब मैं XIB का उपयोग कर रहा हूं, तो मुझे इस विधि के बिना ठीक ठीक हो जाता है। विचारों के लिए मैं प्रोग्रामेटिक रूप से निर्माण करता हूं, मैं आमतौर पर लोडव्यू के साथ ठीक हूं। विचारों के लिए मैं आईबी के साथ निर्माण करता हूं, मैं viewDidLoad {} का उपयोग करता हूं। तो मैं समझने की कोशिश कर रहा हूं जब initWithCoder का उपयोग करना समझ में आता है: – Coocoo4Cocoa

1

मैं एनएससीओडर के साथ जाता हूं जब भी मेरे पास स्टोर करने के लिए कुछ जटिल डेटा होता है जिसे मुझे हाथ से संपादित नहीं करना पड़ता है। उदाहरण के लिए, मेरा ऐप Converter एनएससीओडर संग्रह में इंटरनेट से डाउनलोड मुद्रा विनिमय दरों को संग्रहीत करता है। हालांकि, यह एकमात्र चीज है जो इस तरह के संग्रह में रखती है: यूनिट परिभाषाएं, जिन्हें केवल हाथ से बदला जाता है, को एप्लिकेशन बंडल में प्लेस्ट फ़ाइलों की एक श्रृंखला में रखा जाता है, और हाल ही में चयनित इकाइयों और मूल्यों जैसी चीजें रखी जाती हैं NSUserDefaults।

संबंधित मुद्दे