2013-05-22 9 views
5

पर कई ऑब्जेक्ट्स जोड़ना NSMutableDictionary में एक ही कुंजी में मैं एकाधिक ऑब्जेक्ट्स कैसे जोड़ूं? मुझे सही विधि नहीं मिल रही है। setObject विधि केवल कुंजी सरणी में एक ही वस्तु को अद्यतन करती है। NSMutableDictionary में विधि addObject: forkey: विधि उपलब्ध नहीं है और इसका उपयोग होने पर क्रैश हो रहा है।एनएसएमयूटेबल डिक्शनरी एक कुंजी

शब्दकोश plist फ़ाइल से पढ़ा जाता है।

शब्दकोश:,

NSMutableDictionary *newDict = [[NSMutableDictionary alloc] init]; 
str_nickname = [temp objectForKey:@"nickname"]; 
for (NSString *key in str_nickname){ 
    if ([key isEqualToString:@"level2"]) { //replace object with new name 
     [newDict setObject:@"new level" forKey:@"nickname"]; 
    } else { 
     [newDict addObject:key forKey:@"nickname"]; //wont work!!! 
    } 
} 

इसके अलावा, मैं नया शब्दकोश में नए स्कोर अपडेट करना चाहते हैं और इसी स्तर-वस्तु पर इस अद्यतन करने के लिए है:

temp = { 
    nickname : score 
     item 0 = level1; 
     item 1 = level2; 
     item 3 = level3; 
    score 
     item 0 = 400; 
     item 1 = 400; 
     item 3 = 400; 
} 

यहाँ कोड है शायद सूचकांक द्वारा?

+0

है क्या आपने अपनी डेटा संरचनाओं को अच्छी तरह से परिभाषित किया है? यदि हां, तो यह डिज़ाइन कैसा दिखता है? यह जानकर कि आपकी मदद करना बहुत आसान होगा। – Monolo

+1

इस बारे में सोचें: एक ही कुंजी के लिए दो अलग-अलग ऑब्जेक्ट्स सेट करने के बाद, जब आप 'objectForKey: 'के लिए पूछते हैं तो आपको शब्दकोश क्या देना चाहिए? –

उत्तर

1

अगर आपके plist फ़ाइल इस "test.plist"

The Dictionary temp={ 
    nickname : Junaid Sidhu 

    levels 
      item 0 = level1; 
      item 1 = level2; 
      item 3 = level3; 
    score 
      item 0 = 400; 
      item 1 = 400; 
      item 3 = 400; 
    } 

यहाँ की तरह है कोड

NSDictionary *temp = [[NSDictionary alloc]initWithContentsOfFile:[NSBundle mainBundle] pathForResource:@"test" ofType:@"plist"]]; 

NSMutableDictionary *newDict = [[NSMutableDictionary alloc] init]; 

NSString *str_nickname = [temp objectForKey:@"nickname"]; 
NSMutableArray *levels = [NSMutableArray new]; 
NSMutableArray *score = [NSMutableArray new]; 

for (NSString *key in [temp allKeys]){ 

    if ([key isEqualToString:@"levels"]) { //replace object with new name 

      levels = [NSMutableArray arrayWithArray:(NSArray *)[temp objectForKey:key]]; 

    } 
    else if ([key isEqualToString:@"score"]){ 

      score = [NSMutableArray arrayWithArray:(NSArray *)[temp objectForKey:key]]; 

    } 
} 

NSLog(@"Nick : %@ \n levels : %@ \n score : %@ \n",str_nickname,levels,score) 
+0

मैं एक पहेली खेल के स्तर के स्कोर को स्टोर करने के लिए एक प्लेलिस्ट फ़ाइल का उपयोग करना चाहता हूं। मैंने NSUserdefaults के साथ यह कोशिश की, जो एक ही संरचना के साथ कम या कम काम करता है। मेरा प्रश्न: क्या मैं सही रास्ते पर हूं, या क्या मुझे गेम डेटा संग्रहीत करने के लिए एक और विधि का उपयोग करना चाहिए? मैं एक्सकोड के साथ बहुत नया हूं, लेकिन मैंने घंटों के लिए खोज की है –

+0

हाँ आप उपयोगकर्ता डिफॉल्ट का उपयोग कर सकते हैं लेकिन एनएससीओडर सबसे अच्छा – junaidsidhu

+0

धन्यवाद जयड! –

2

आप एक शब्दकोश में एक ही कुंजी के अंतर्गत संग्रहीत से अधिक ऑब्जेक्ट के लिए चाहते हैं, तो अपने ही मौका उन्हें

  • सेट
  • बैग
  • एक

    • सरणी
    • अन्य शब्दकोश में डाल रहा है
    • किसी भी संग्रह प्रकार आप कल्पना

    एक अपने शब्दकोश में संग्रहित करना। कारण है, शब्दकोश कुंजी-मूल्य-PAIRINGS हैं। संपूर्ण वास्तुकला एक कुंजी का समर्थन करने के लिए नहीं बनाई गई है जो एक से अधिक ऑब्जेक्ट से मेल खाती है। ऑब्जेक्ट्स सिस्टम के लिए अविभाज्य होगा, इसलिए, कोई पासा नहीं।

    संपादित करें: यदि आप किसी इंडेक्स का उपयोग करके ऑब्जेक्ट तक पहुंचना चाहते हैं, तो मुझे लगता है कि आपकी सर्वश्रेष्ठ शर्त ऐरे-वर्जन है। कुंजी "उपनाम" के लिए अपने शब्दकोश में एक परिवर्तनीय ऐरे स्टोर करें, फिर उस सरणी में ऑब्जेक्ट जोड़ें। स्टोर करने के लिए:

    [myDictionary setObject:[NSMutableArray array] ForKey:@"nickname"]; 
    [[myDictionary objectForKey:@"nickname"] addObject:yourObject]; 
    

    को पुनः प्राप्त करने के लिए:

    [[myDictionary objectForKey:@"nickname"] objectAtIndex:index]; 
    
    संबंधित मुद्दे