2012-05-01 14 views
5

अपने प्रोजेक्ट में मैं एक NSDictionary से एक .plist से डेटा खींच रहा हूँ, और अधिक ठोस रूप। मैं .plist की सामग्री के साथ एक शब्दकोश में प्रवेश करता हूं, जो अच्छी तरह से काम करता है। यह सब कुंजी के साथ सरणी भरता है जब मैं तोNSDictionary की allKeys सरणी गड़बड़ हो गई - क्रम में वे क्रम में नहीं हैं?

NSArray *array = [dict allKeys]; 

करते हैं, लेकिन एक पूरी तरह से यादृच्छिक क्रम में, क्रम में करने के लिए विभिन्न वे .plist फ़ाइल में हैं। मुझे वास्तव में आदेश को संरक्षित करने की आवश्यकता होगी। शब्दकोश में कुंजी सरणी हैं, अगर इससे कोई समस्या हो सकती है। मुझे क्या नहीं मिल रहा है?

बहुत पहले से धन्यवाद!

उत्तर

7

वहाँ एक NSSet में आइटम के बीच कोई आदेश है बहुत की तरह, वहाँ एक NSDictionary भीतर कुंजी-मान जोड़ों के लिए कोई स्वाभाविक क्रम है।

आप एक विशिष्ट क्रम के तहत कुंजी चाहते हैं, आप - (NSArray *)keysSortedByValueUsingComparator:(NSComparator)cmptr की तरह कुछ का उपयोग करने की आवश्यकता होगी, लेकिन वह जिस क्रम में NSDictionary plist फ़ाइल में धारावाहिक नहीं देंगे।

+0

तो जवाब है, है कि मैं क्या करना चाहते हैं के लिए संभव है यह नहीं है? –

+0

बेशक यह संभव है, यह उतना आसान नहीं है जितना आप उम्मीद कर रहे हैं। जो कुछ आप पूरा करने की कोशिश कर रहे हैं उसे पूरा करने के लिए एक ही तरीके से मेरा उत्तर देखें। –

+2

यदि आप चाहते हैं _ "क्या जिस क्रम में वे मुख्य मान plist फ़ाइल में जमा हो जाती है?" _ तो संक्षिप्त उत्तर है "नहीं"। लंबा जवाब: जब तक आप प्लिस्ट फ़ाइल को मैन्युअल रूप से पार्स करने का बोझ नहीं चाहते हैं। NSDories में _unordered_ कुंजी-मान जोड़े हैं। NSArrays _ordered_ आइटम पकड़ो। यदि आप डेटा को संग्रहित और पढ़ रहे हैं, तो शायद आपको अपने डेटा को स्टोर करने के लिए एनएसएआरएआरई का उपयोग करने की आवश्यकता है। –

3

के रूप में क्वर्टी बॉब ने कहा, NSDictionary इसकी सामग्री का आदेश नहीं है। यदि आपको चाबियों के लिए ऑर्डर जारी रखने की आवश्यकता है, तो ऐसा करने का एक तरीका आपकी .plist फ़ाइल में कुंजियों की सरणी को अलग से स्टोर करना होगा। फिर, सरणी का आकलन करें और क्रम में शब्दकोश मानों तक पहुंचने के लिए इसका उपयोग करें।

2

आप आप चाहते हैं क्रम में शब्दकोश कुंजी के साथ एक NSArray बना सकते हैं।

+0

क्या आप कृपया एक उदाहरण दे सकते हैं? – Dejell

6

ऐसी कोई इनबिल्ट विधि है जिसमें से आप इस प्राप्त कर सकते हैं नहीं है। लेकिन आपके लिए एक साधारण तर्क काम है। जब आप शब्दकोश तैयार करते हैं तो आप बस प्रत्येक कुंजी के सामने कुछ संख्यात्मक पाठ जोड़ सकते हैं।

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys: 
         @"01.Created",@"cre", 
         @"02.Being Assigned",@"bea", 
         @"03.Rejected",@"rej", 
         @"04.Assigned",@"ass", 
         @"05.Scheduled",@"sch", 
         @"06.En Route",@"inr", 
         @"07.On Job Site",@"ojs", 
         @"08.In Progress",@"inp", 
         @"09.On Hold",@"onh", 
         @"10.Completed",@"com", 
         @"11.Closed",@"clo", 
         @"12.Cancelled", @"can", 
         nil]; 

अब जैसा आप sortingArrayUsingSelector उपयोग कर सकते हैं अगर एक ही आपको जगह के रूप में में सभी चाबियाँ हो रही है।

NSArray *arr = [[dict allKeys] sortedArrayUsingSelector:@selector(localizedStandardCompare:)]; 

उस स्थान पर जहां आप UIView में कुंजी प्रदर्शित करना चाहते हैं, बस सामने के 3 वर्ण को काट लें।

+0

धन्यवाद ब्लैक टाइगर :) –

-1

इस प्रयास करें:

NSArray *array = [dict allKeys]; 

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO]; 
NSArray *descriptors = [NSArray arrayWithObject:descriptor]; 

NSArray *orderedKeys = [array sortedArrayUsingDescriptors:descriptors]; 
संबंधित मुद्दे