2009-08-28 17 views
12

के माध्यम से प्रबंधित ऑब्जेक्ट्स के एनएसएमयूटेबलएरे को सॉर्ट करने के लिए कैसे करें मैं कोर डेटा के ऐप्पल के आईफोन 3.0 एसडीके समर्थन के लिए नया हूं और मैं आईफोन विकास के लिए अपेक्षाकृत नया हूं। मेरा प्रश्न दस्तावेज़ों में शामिल होने की तुलना में थोड़ा अधिक "जटिल" सॉर्टिंग पर है। मुझे संदेह है कि मैं गलत, मौलिक धारणा बना रहा हूं।ऑब्जेक्ट ग्राफ़

मैं संपत्ति में प्रबंधित वस्तुओं के प्री-फ़ेच किए गए संग्रह को कैसे क्रमबद्ध कर सकता हूं जिसमें संग्रह में कई परतें गहरी हैं?

उदाहरण: फार्म चरवाहा (Farm.cowboys) के लिए कई करने के लिए एक 1 चरवाहा एक 1 व्यक्ति (Cowboy.person) व्यक्ति है lastName (Person.lastName)

संपूर्ण वस्तु के लिए 1 के लिए है है ग्राफ लाया गया है और काउबॉय को UITableView के माध्यम से प्रदर्शित किया जाता है। अब, मैं आखिरी नाम से काउबॉय को कैसे क्रमबद्ध करूं? क्या मुझे उन्हें फिर से लाने की ज़रूरत है? और यदि हां, तो मैं इसे घोंसले के साथ कैसे करूं?

वर्तमान में मैं काउबॉय के एक एनएसएमयूटेबलएरे को सॉर्ट करने की कोशिश कर रहा हूं ([फार्म.कोबॉयज ऑलोबजेक्ट्स]) जो काउबॉय पर उन गुणों के लिए ठीक है। लेकिन मुझे यकीन नहीं है कि Cowboy.person.lastName द्वारा काउबॉय के संग्रह को सॉर्ट करते समय यह काम कैसे करें?

उत्तर

0

उम्मीद है कि किसी के पास बेहतर समाधान होगा। हालांकि ....

एक तुलनात्मक चयनकर्ता के साथ एक रैपर ऑब्जेक्ट और सॉर्ट ऑब्जेक्ट कार्यों का संदर्भ। यह उतना साफ नहीं है जितना मैं उम्मीद करता हूं कि कोई और विकल्प के साथ आएगा।

संक्षेप में काउबॉयवापर के पास काउबॉय संपत्ति है। CowboyWrapper भी एक तुलना चयनकर्ता है। CowboyWrappers के एनएसएमयूटेबलएरे को सिंक करने और बनाए रखने के द्वारा, सॉर्ट काम करता है।

21

यदि आप 10.6 को लक्षित कर सकते हैं, तो आप इसे ब्लॉक का उपयोग करके पूरा कर सकते हैं। इसलिए जैसा:

- (NSArray *)sortedArray { 
    return [originalArray sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2){ 
    NSString *lastName1 = [[obj1 person] lastName]; 
    NSString *lastName2 = [[obj2 person] lastName]; 
    return [lastName1 caseInsensitiveCompare:lastName2]; }]; 
} 
+2

इसके अलावा, यह देखते हुए अगर आप एक 'NSMutableArray' उपयोग कर रहे हैं लायक, तुम बस का उपयोग कर सकते' sortUsingComparator: 'बजाय, आप चाहते हैं, तो । –

+0

आपको एनएससीओम्पैटर को कास्ट हटा देना चाहिए। – Psycho

5

तुम इतनी तरह सॉर्ट कर सकते हैं:

[myUnsortedArrayOfCowboys sortedArrayUsingDescriptors: 
    [NSArray arrayWithObject: 
     [NSSortDescriptor 
      sortDescriptorWithKey:"person.lastName" 
      ascending:YES]]]; 

सूचना '।' क्रम में वर्णक कुंजी में। इस प्रकार आप ऑब्जेक्ट ग्राफ़ को पार करते हैं।

1

आप संख्या और स्ट्रिंग को सॉर्ट करना चाहते हैं तो इसका उपयोग करें

NSArray *unsortedArray = [NSArray arrayWithObjects:@"Hello", @"4", @"Hi", @"5", @"2", @"10", @"1", nil]; 
NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:^(id firstObject, id secondObject) { 
    return [((NSString *)firstObject) compare:((NSString *)secondObject) options:NSNumericSearch]; 
}]; 
संबंधित मुद्दे