2010-09-29 11 views
33

से एनएस डिक्शनरी के अंदर एक बूल को बहाल करना मेरे पास एक प्लेलिस्ट फ़ाइल है जिसमें शब्दकोशों की एक सरणी है।एक प्लिस्ट फ़ाइल

फ्रेड शब्दकोश
नाम फ्रेड
isMale [बॉक्स चेक किया गया]

तो अब मैं शब्दकोश मैं plist फ़ाइल से पढ़ने के साथ मेरे व्यक्ति वस्तु आरंभ कर रहा हूँ:

-(id) initWithDictionary: (NSDictionary *) dictionary { 
    if (self = [super init]) 
    self.name = [dictionary valueForKey: @"Name"]; 
    self.isMale = ???? 
    } 
यहाँ उनमें से एक है

मैं उपर्युक्त कोड कैसे समाप्त करूं ताकि स्वयं .इसमेल को प्लेस फ़ाइल में चेक किया गया हो, और नहीं, तो नहीं। शब्दकोश में कोई कुंजी नहीं है तो पसंदीदा रूप से भी सेट करें।

उत्तर

81

बूल मान आमतौर पर NSNumber ऑब्जेक्ट में लिपटे obj-c कंटेनर में संग्रहीत होते हैं। यदि यह आपके मामले में ऐसा है, तो आप का उपयोग कर bool मान प्राप्त कर सकते हैं:

self.isMale = [[dictionary objectForKey:@"isMale"] boolValue]; 
+0

बहुत बढ़िया! धन्यवाद दोस्त। –

6

व्लादिमीर सही है, मैं बस में झंकार और कहते हैं कि यह जांच करने के लिए अच्छा है कि plist से उन मूल्यों के साथ-साथ अस्तित्व के लिए जा रहा हूँ , और यदि इसे आमतौर पर डिफ़ॉल्ट मान पर सेट नहीं किया जाता है।

कुछ की तरह:

id isMale = [dictionary valueForKey:@"isMale"]; 
self.isMale = isMale ? [isMale boolValue] : NO; 

यदि कुंजी "isMale" के लिए मूल्य शब्दकोश में मौजूद है देखने के लिए जाँच करता है कौन सा। यदि ऐसा होता है तो यह उस से बूलवैल्यू प्राप्त करता है। यदि ऐसा नहीं होता है तो यह स्वयं को डिफ़ॉल्ट रूप से सेट करता है।

+3

यह केवल तभी जरूरी है जब आप चाहते हैं कि व्यक्ति डिफ़ॉल्ट रूप से पुरुष बनें (डिफ़ॉल्ट रूप से 'हाँ')। आप संदेश को 'शून्य' ('- [NSDictionary objectForKey:]' और '- [NSDictionary valueForKey:]' के वापसी मूल्य को भेज सकते हैं जब कुंजी में शब्दकोश मौजूद नहीं है) बिना जांच के पहले यदि आप ठीक हैं 'NO' का डिफ़ॉल्ट। http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocObjectsClasses.html%23//apple_ref/doc/uid/TP30001163-CH11-SW7 –

+0

आह हाँ आप सही हैं । मैं BOOL (जैसे एनएसएसटींग) के अलावा अन्य मानों के लिए सामान्य उत्तर प्रदान करने और डिफ़ॉल्ट मान प्रदान करने के लिए एक सामान्य तरीका प्रदान करने के बीच में पकड़ा गया। – djdrzzy

+0

मैं एक झटका होने जा रहा हूं और कहता हूं कि ऐप्पल को किसी भी परिभाषित (BOOL) 0 को हमेशा के लिए परिभाषित रखने की गारंटी नहीं है, हालांकि उस स्थिति में डिफ़ॉल्ट मान हमेशा नहीं हो सकता है। : पी अगर उन्होंने कभी इसे बदल दिया है, हालांकि यह बहुत बेवकूफ और अव्यवहारिक होगा। – djdrzzy

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