2011-12-30 13 views
5

से मूल्यों का योग कैसे प्राप्त करें मेरे पास एक मॉडल 'पेन' है और इसमें ऐसी गुण हैं: "निर्माता नाम" और "गणना"। मैं सभी 'गणना' का योग कैसे प्राप्त कर सकता हूं? कोर डेटा मेरे लिए यह गिन सकता है? धन्यवाद ...आईफोन: कोर डेटा, डीबी

उत्तर

9

इस समस्या को हल करने के दो तरीके हैं:
पहले - NSSet या NSArray के लिए अपने डेटा मिलता है और @sum ऑपरेटर का उपयोग करें:

//assume that `pens` are NSArray of Pen 
NSNumber *countSum=[pens valueForKeyPath:"@sum.count"]; 

दूसरा विशिष्ट उपयोग कर रहा है एक राशि के साथ जोड़ा NSExpressionDescription साथ for specific value लाने। इस तरह से कठिन है लेकिन बड़े डीबी के

+0

बड़िया है, मैं पहले जिस तरह से पसंद नहीं है। और क्या होगा यदि पेन के पास एक और संपत्ति 'रंग' है और मैं लाल पेन की गिनती करना चाहता हूं? – Jim

+0

बस एनएसपी्रेडिकेट का उपयोग करके लाल पेन के साथ सरणी बनाएं, और इस सरणी को जोड़ दें। –

+0

बहुत बहुत धन्यवाद ... – Jim

0

मैं एसक्यूएल बराबर आप चाहते हैं यह सोचते कर रहा हूँ है:

select sum(p.count) 
from pens p 
where makerName = '{whatever maker you are querying for}' 

कोड आप देख रहे हैं के लिए इस post पर एक नजर डालें।

+0

कि Obj सी कोड) iPhone Obj सी – Jim

10

हां, आप परिणामों को लाने और मूल्यांकन करने के बजाय, मूल डेटा से प्राप्त कर सकते हैं। आप NSExpression के उपयोग से कोर डेटा पर योग जैसे कार्यों को निष्पादित कर सकते हैं।

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"Count"]; 
NSExpression *sumOfCountExpression = [NSExpression expressionForFunction:@"sum:" 
               arguments:[NSArray arrayWithObject:keyPathExpression]]; 
कार्यों कि तुम यहाँ

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSExpression_Class/Reference/NSExpression.html जाना उपयोग कर सकते हैं की सूची के लिए

आपको फिर एक NSExpressionDescription ऑब्जेक्ट बनाने की आवश्यकता है जहां आपने अभिव्यक्ति सेट की है जो आपने अभी बनाया है sumOfCountExpression।

NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init]; 
[expressionDescription setName:@"sumOfCount"]; 
[expressionDescription setExpression:sumOfCountExpression]; 
[expressionDescription setExpressionResultType:NSDoubleAttributeType]; 

फिर अपने अनुरोधों का निर्माण करें जैसा कि आप आमतौर पर करेंगे और फिर संपत्ति को उस अभिव्यक्ति को लाने के लिए सेट करें।

[request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]]; 

देखें: Core Data Programming Guide

+2

यह ध्यान देने योग्य है कि आपको NSDictionaryResultType होने के लिए NSFetchRequest पर परिणाम टाइप करने की आवश्यकता है, और वापस दिया गया मान वापस 'sumOfCount' के अंतर्गत लौटाए गए शब्दकोश में होगा, या जो भी आपने सेटनाम में सेट किया है ऊपर। –

+0

@ स्कॉटअलेन: धन्यवाद! वह दुर्घटनाग्रस्त हो रहा था और मुझे बोनकर्स चला रहा था, और यह जवाब यह कैसे करना है इसका दूसरा विवरण है मैंने देखा है कि इस छोटे से महत्वपूर्ण विवरण को छोड़ देता है! –

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