2013-01-16 13 views
5

के रूप में प्लिस्ट से NSDictionary लोड हो रहा है मैं plist का उपयोग कुंजी-मान सूचियों को संग्रहीत करने के लिए कर रहा हूं। जब एप्लिकेशन को उस सूची की आवश्यकता होती है, तो लोड सूची को NSDictionary पर आज़माएं। यहां तक ​​कि सब कुछ ठीक है।सूचीबद्ध

यहाँ कैसे मैं plist फ़ाइल लोड:

NSString *myPlistFilePath = [[NSBundle mainBundle] pathForResource: @"cities" ofType: @"plist"]; 
cities = [NSDictionary dictionaryWithContentsOfFile: myPlistFilePath]; 

जब हम देखते हैं, cities एक NSDictionary है। फिर मैंने सभी सूची कुंजी मानों को एक टेबल व्यू में धक्का दिया, किसी भी तरह से यह प्लेलिस्ट फ़ाइल में सूचीबद्ध नहीं है। यादृच्छिक छंटनी।

क्या पता लगाने का कोई तरीका है? अग्रिम धन्यवाद।

+1

आप इस के लिए एक समाधान मिला? मुझे एक ही समस्या है –

उत्तर

4

एक NSDictionary एक आदेश दिया गया संग्रह नहीं है, यानी, यह किसी भी तरह से सामग्री के क्रम को संरक्षित करने की गारंटी नहीं देता है। इसका एकमात्र कार्य कुंजी से मूल्यों तक मैप करना है।

यदि आपको आदेशित सामग्री की आवश्यकता है, तो आप इसे keysSortedByValueUsingSelector का उपयोग करके NSDictionary से निकाल सकते हैं, जो संग्रह में डेटा निकाल देगा, इसे आपके मानदंडों से क्रमबद्ध करेगा और इसे एक (ऑर्डर संरक्षित) NSArray में संग्रहीत करेगा।

वैकल्पिक रूप से, प्लान की जड़ में एक ऐरे का उपयोग करने पर विचार करें, जिसमें शहर के शब्दकोशों की एक आदेशित सूची शामिल है। फिर यदि आप उसमें निहित सरणी पर फिर से चलते हैं, तो वे प्लेस्ट में निहित सरणी क्रम में होंगे।

+0

मौलिक उत्तर के लिए धन्यवाद। –

1

NSDictionary एक आदेशित डेटा संरचना नहीं है।

ऑब्जेक्ट्स allKeys फ़ंक्शंस के आधार पर सूचीबद्ध हैं और कुंजी अपरिभाषित तरीके से सूचीबद्ध हैं।

allKeys फ़ंक्शन के लिए सेब दस्तावेज़ देखें।

allKeys शब्दकोश की कुंजियों युक्त एक नई सरणी देता है।

  • (NSArray *) allKeys

वापसी मूल्य एक नई सरणी शब्दकोश की चाबियाँ, या एक खाली सरणी युक्त अगर शब्दकोश कोई प्रविष्टि नहीं है।

चर्चा सरणी में तत्वों का क्रम निर्धारित नहीं है।

+2

उत्तर के लिए धन्यवाद, तो सूचीबद्ध के रूप में लोड करने के लिए आपका सुझाव क्या है? –

0

आप, कुंजी सॉर्ट plist की जड़ में किसी सरणी उपयोग करने पर विचार करने के लिए एक चयनकर्ता का उपयोग से बचना चाहते हैं। फिर जब आप सरणी पर फिर से सक्रिय होते हैं, तो आदेश संरक्षित होता है। यह ओ (एन), जो लॉग का एक पहलू से सबसे तेजी से संभव तरह एल्गोरिथ्म तुलना में कम है चलाता है (एन)
जैसे:

cities{ 
    list[ 
    city{} 
    city{} 
    city{} 
    ... 
    ] 
} 
संबंधित मुद्दे