2009-07-10 4 views
7

मैंने सोचा कि NSSet से अपने सदस्यों को मतदान करने के लिए जल्दी से पूछने का एक तरीका था और इसकी प्रत्येक ऑब्जेक्ट में NSInteger संपत्ति का एक सारांश वापस लौटा, लेकिन मैं इसे मैक ओएस एक्स चीजों के साथ भ्रमित कर सकता हूं। क्या यह कोकोका टच में मौजूद है?एनएसएससेट के भीतर सभी वस्तुओं की संपत्ति को समेटने का त्वरित तरीका?

सबसे नज़दीकी चीज़ जो मुझे मिल सकती है objectEnumerator है, जिससे मुझे लगता है कि मैं प्रत्येक ऑब्जेक्ट के माध्यम से राइफल कर सकता हूं और अपना खुद का चर बढ़ा सकता हूं। क्या बेहतर तरीका मौजूद है?

+0

क्या आप NSArrayController व्यवस्थित ऑब्जेक्ट्स के बारे में बात कर रहे हैं। @ Sum। ... सामान? मुझे यकीन नहीं है कि इसे एनएसएससेट से कैसे कनेक्ट करें और विशिष्ट वर्ग के सदस्यों की गिनती कैसे प्राप्त करें ... मैं उस पर पढ़ने के लिए एचवी करूंगा। – stefanB

उत्तर

15

आप एक सरणी/सेट व्युत्पन्न वर्ग के प्रत्येक सदस्य के लिए किसी दिए गए संपत्ति (theIntegerPropertyToSum) कि KVC अनुरूप है (theSet) का योग खोजने की कोशिश कर रहे हैं, तो आप निम्न कर सकते हैं:

NSNumber* theSum = [theSet valueForKeyPath:@"@sum.theIntegerPropertyToSum"]; 
+0

यह बहुत अच्छा है! कहां, बीटीडब्ल्यू, क्या यह दस्तावेज है? मुझे केवीसी प्रोटोकॉल संदर्भ में "valueForKeyPath:" की परिभाषा में/आसपास कुछ भी नहीं मिल रहा है ... – Meltemi

+0

उन्हें कुंजी मान कोडिंग संग्रह ऑपरेटर कहा जाता है और दस्तावेज़ को खोजने में मुश्किल होती है ... http: // developer .apple.com/लाइब्रेरी/आईओएस/# दस्तावेज/कोको/वैचारिक/कुंजीवैल्यूकोडिंग/लेख/संग्रहऑपरेटर्स.html –

+0

यह कोड रखरखाव अनुकूल नहीं है और लोगों को लाइन के नीचे भ्रमित कर देगा। –

-3

क्यों सादा उद्देश्य सी (2) का उपयोग नहीं करते?

NSInteger theSum = 0; 
for (id obj in theSetOrArray) 
    theSum += obj.theIntegerPropertyToSum; 

नुकसान: आप लाइनों की गणना कैसे करना है, तो इस लंबे समय तक लग रहा है। क्या कोई अन्य नुकसान हैं - मुझे आश्चर्य है कि केवीसी विधि के साथ उन वस्तुओं के साथ क्या होता है जिनके पास आवश्यक 'thetegerPropertyToSum' संपत्ति नहीं है?

लाभ: मैं शर्त लगाता हूं कि यह डीबग और प्रदर्शन परीक्षण आसान है। इसके अलावा जब कोई और एक या दो साल में आपका कोड पढ़ता है तो उन्हें पता चलेगा कि यहां क्या हो रहा है - चाहे उन्होंने कभी भी उद्देश्य सी की रेखा देखी हो या नहीं, ऐसा लगता है कि वास्तव में क्या हो रहा है।

+2

आपके उत्तर का तात्पर्य है कि आपने केवीसी पर प्रलेखन का उपयोग या पढ़ा नहीं है - आप इसे कहने से पहले इसके बारे में पढ़ना चाहेंगे। अपने "सादे उद्देश्य सी (2)" उदाहरण में, क्या होता है जब इंटेगरप्रोपर्टी टोसम को अपरिभाषित किया जाता है, या इंटेगरप्रोपर्टी टोसमम का एक मान -1 है और दूसरा 1.2 है? क्या होगा अगर यह शून्य है? –

+0

मैं हमेशा केवीसी का उपयोग करता हूं - यूआई को कोड के साथ संवाद करने देता हूं। का नुकसान [theSet valueForKeyPath: @ "@ sum.theIntegerPropertyToSum"] यह एक भाषा निर्माण है जो एक नज़र में नहीं दिख रहा है कि क्या हो रहा है। किसी भी जावास्क्रिप्ट सी, सी # प्रोग्रामर मूल्य को देखकर फोरकेपैथ कथन इसे समझ नहीं पाएगा - और कोड की एक पंक्ति को समझने के लिए एक समय लेने वाले पाठ में चूसना चाहिए। भाषा विशिष्ट संरचनाओं का कभी भी उपयोग न करें जबतक कि आपको उनकी आवश्यकता न हो। मुझे एसटीएल सी ++ कोड की याद दिलाता है, जो एसटीएल विशेषज्ञों के अलावा सभी के लिए अपठनीय है। –

+1

लगता है जैसे आप हमेशा केवीओ का उपयोग करते हैं, केवीसी नहीं। –

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

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