2010-10-04 13 views
16

मेरे पास .NET वेब सेवा से वापस लौटाए जाने वाले कस्टम ऑब्जेक्ट्स की एक सूची है और कोर डेटा के साथ अभिभावक enitity से एक से कई रिश्तों का उपयोग करके उन्हें संग्रहित कर रहा हूं।क्या [NSSet allObjects] प्रत्येक बार एक ही क्रम के साथ एक सरणी वापस कर देगा?

मैं एनएसएससेट को UITableView के लिए डेटासोर्स के रूप में उपयोग करना चाहता हूं और एक पंक्ति का चयन करते समय एक नया नियंत्रक ढेर पर धक्का देना चाहता हूं।

[NSSet allObjects] का उपयोग करते समय सरणी हमेशा एक ही ऑर्डर लौटाती है? (मैं के रूप में सेट अव्यवस्थित हैं नहीं लगता है)

यदि नहीं, तो कैसे तो मैं cellForRowAtIndexPath में NSArray *myArray = [mySet allObjects]; उपयोग कर सकते हैं ViewController करने के लिए वस्तु आवंटित करने के लिए सेल के textLabel और फिर didSelectRowAtIndexPath में फिर नाम पाने के लिए के बारे में धकेल दिया ?

मेरे पास पहले से ही मेरे UITableViewDelegate में संश्लेषित मूल वस्तु है। मैं भी एक NSArray संश्लेषित होने और बनाने के लिए केवल viewDidLoad में एक बार allObjects का उपयोग कर, लेकिन इस स्मृति में डेटा डुप्लिकेट कर रही है के बारे में सोचा

उत्तर

7

आपका समाधान, एक NSArray एक बार निकालने viewDidLoad दौरान, सही एक है। आप वास्तव में अधिक स्मृति डुप्लिकेट नहीं करेंगे। आपकी वस्तुएं अभी भी एक बार स्मृति में होंगी; यह सिर्फ आपके NSSet और NSArray दोनों में उन ऑब्जेक्ट्स के पॉइंटर्स होंगे।

31

इसकी कोई गारंटी नहीं है कि वे, के बाद से एक NSSet नहीं है तकनीकी रूप से एक ही क्रम में हो जाएगा (है) व्यवस्था बनाए रखें। यदि ऐसा होता है तो ऑब्जेक्ट्स प्रत्येक बार एक ही क्रम में वापस आते हैं, तो ध्यान रखें कि यह एक कार्यान्वयन विवरण है, दस्तावेज नहीं है, और संभावित रूप से ढांचे के भविष्य में रिलीज में बदला जा सकता है।

the documentation के शब्दों में:

(-[NSSet allObjects] रिटर्न) [एक] n सेट के सदस्यों, या एक खाली सरणी युक्त अगर सेट में कोई सदस्य नहीं सरणी। सरणी में वस्तुओं का क्रम परिभाषित नहीं किया गया है।

(जोर जोड़ा)

+0

इस उत्तर में वास्तव में मूल प्रश्न का उत्तर है। – Gomfucius

4

एनएसएससेट के बजाय NSOrderedSet का उपयोग करें।

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