मुझे किसी भी विशिष्ट कार्यान्वयन से अवगत नहीं है, लेकिन कुंजी-मूल्य कोडिंग आपको जो चाहिए वह बहुत करीब ले जाती है: Key Value Coding Guide। मेरे पास केवीसी के साथ streamed json parsing संयोजन के अच्छे परिणाम हुए हैं।
द -सेट वैल्यू: forKey: विधि कस्टम ऑब्जेक्ट्स को सीरियलाइज्ड डेटा को काफी सरल बनाता है। अपने उदाहरण के साथ जारी रखने के लिए, आप सभी आवश्यक एक्सेसर विधियों के साथ एक यूनिकॉर्न क्लास तैयार करेंगे: -setName:/- name, -setManecolor/-manecolor, आदि (आप कुछ अपेक्षित मानों के लिए गुणों का उपयोग करने में सक्षम हो सकते हैं, लेकिन वहां हैं मामलों, जैसा कि मैनकॉलर वैल्यू के साथ, जहां आप रंग नाम स्ट्रिंग से एनएससीओलर या यूआईसीओलर ऑब्जेक्ट में कनवर्ट करने के लिए कस्टम सेटर लिखना चाहते हैं।)
आप अपनी कस्टम ऑब्जेक्ट में दो और विधियां भी जोड़ना चाहेंगे : -setValue: forUndefinedKey: और -valueForUndefinedKey:। ये विधियां हैं जिन्हें कॉल किया जाएगा यदि आपके ऑब्जेक्ट में केवीसी विधियों में पारित कुंजी से मेल खाने वाले कोई एक्सेसर विधियां नहीं हैं। आप यहां अप्रत्याशित या असमर्थित मान प्राप्त कर सकते हैं, और उन्हें स्टोर कर सकते हैं या आवश्यकतानुसार उन्हें अनदेखा कर सकते हैं।
जब आप -setValue भेजते हैं: forKey: यूनिकॉर्न ऑब्जेक्ट में, ढांचा मुख्य पैटर्न से मेल खाने वाले एक्सेसर्स की तलाश करता है। उदाहरण के लिए, यदि कुंजी "मैनकॉलर" है और आप मान सेट कर रहे हैं, तो फ्रेमवर्क यह देखने के लिए जांच करता है कि क्या आपका ऑब्जेक्ट लागू होता है -setManeColor:। यदि ऐसा है, तो यह मूल्य में गुजरने वाली विधि को आमंत्रित करता है; अन्यथा, -setValue: forUndefinedKey: कहा जाता है, और यदि आपका ऑब्जेक्ट इसे कार्यान्वित नहीं करता है, तो एक अपवाद फेंक दिया जाता है।
जब आपके पार्सर के प्रतिनिधि को अधिसूचना प्राप्त होती है कि एक जेसन यूनिकॉर्न ऑब्जेक्ट को पार्स करना शुरू हो गया है, तो यूनिकॉर्न ऑब्जेक्ट को तुरंत चालू करें। forKey: अपने पार्सर आप को पार्स डेटा रिटर्न के रूप में, -setValue का उपयोग अपने ऑब्जेक्ट के लिए डेटा जोड़ने के लिए:
- (void)parserDidBeginParsingDictionary: (SomeParser *)p
{
self.currentUnicorn = [ Unicorn unicorn ];
}
- (void)parser: (SomeParser *)p didParseString: (NSString *)string
forKey: (NSString *)key
{
[ self.currentUnicorn setValue: string forKey: key ]
}
- (void)parserDidFinishParsingDictionary: (SomeParser *)p
{
[ self.unicorns addObject: self.currentUnicorn ];
}
स्रोत
2011-04-27 18:00:23
+1 – psy