मेरे जीवन के लिए मुझे यह काम करने के लिए प्रतीत नहीं होता है।आप NSFetchRequest setHavingPredicate के लिए पूर्वानुमान कैसे बनाते हैं :?
मान लें कि हमारी इकाई एक स्थिति क्षेत्र और ऑर्डर फ़ील्ड के साथ एक प्रबंधित ऑब्जेक्ट है।
मैं सभी ऑर्डर प्राप्त करने के बारे में कैसे जाउंगा जिसमें एक से अधिक ऑर्डर हैं जो समान हैं?
कृपया मुझे कोई जवाब नहीं दें कि मुझे मुख्य पूर्वानुमान में @ गणना के साथ एक सबक्वायरी करने के लिए कहें, क्योंकि मुझे उस समाधान के बारे में पता है, इस पोस्ट का बिंदु यह समझना है कि मूल डेटा में भविष्यवाणी करने का तरीका कैसे उपयोग किया जाए, शायद किसी भी तरह से एक सबक्वायरी से तेज हो। (जब तक कि आप समझाएं कि मैं एक क्लॉज का उपयोग क्यों नहीं कर सकता)
निम्न कोड ऑर्डर संख्याओं के क्रम में शब्दकोशों की एक श्रृंखला को वापस कर देगा। मैं चाहता हूं कि मेरे अनुरोध को प्रतिबंधित करने के लिए एक क्लॉज जोड़ने में सक्षम होना है, केवल उन ऑर्डर की ऑब्जेक्ट्स का प्रतिनिधित्व करने वाले शब्दकोशों को वापस लौटने में सक्षम होना चाहिए जिनकी संख्या 1 से अधिक है।
यहां तक कि कोड है और मेरे प्रयासों में विधेय:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"OrderedEntry"
inManagedObjectContext:context];
[fetchRequest setEntity:entity];
[fetchRequest setResultType:NSDictionaryResultType];
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(status == %@)",[NSNumber numberWithInt:EntryStatusAlive]];
[fetchRequest setPredicate:predicate];
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath: @"order"]; // Does not really matter
NSExpression *maxExpression = [NSExpression expressionForFunction: @"count:"
arguments: [NSArray arrayWithObject:keyPathExpression]];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName: @"orderCount"];
[expressionDescription setExpression: maxExpression];
[expressionDescription setExpressionResultType: NSInteger32AttributeType];
[fetchRequest setPropertiesToFetch: [NSArray arrayWithObjects:expressionDescription,@"order",nil]];
[fetchRequest setPropertiesToGroupBy:[NSArray arrayWithObjects:@"order",nil]];
//[fetchRequest setHavingPredicate:[NSPredicate predicateWithFormat:@"@count > 1"]];
//[fetchRequest setHavingPredicate:[NSComparisonPredicate predicateWithLeftExpression:maxExpression rightExpression:[NSExpression expressionForConstantValue:[NSNumber numberWithInteger:1]] modifier:NSDirectPredicateModifier type:NSGreaterThanPredicateOperatorType options:NSCaseInsensitivePredicateOption]];
NSError *error;
NSArray * array = [context executeFetchRequest:fetchRequest error:&error];
आप कभी भी इस पर एक जवाब मिला? मुझे 'setHavingPredicate' के लिए कई बेकार संदर्भ मिले हैं जो इस भविष्यवाणी के प्रारूप के बारे में कोई संकेत नहीं देते हैं। कोई कामकाजी उदाहरण नहीं है, और मैंने जो भी प्रयास नहीं किया है, वह काम कर चुका है ... –
@ क्रिस्टोफरकिंग नहीं, बिल्कुल मूल रूप से छोड़ दिया गया है, वेब पर कोई जानकारी नहीं है और सेब वेब फ़ोरम अधिक उपयोगी नहीं हैं। मुझे सच में विश्वास है कि कोई भी इसका उपयोग नहीं करता है, क्योंकि एक सामान्य fetch करके और फिर फ़िल्टर के साथ डेटा को मैन्युअल रूप से लूप के साथ स्थानांतरित करने की भविष्यवाणी करने की समान कार्यक्षमता बनाना बहुत आसान है। हम जानना चाहते हैं क्योंकि कुछ करने के लिए हमेशा 'सही तरीका' होता है, खासकर अगर एपीआई प्रदान किया जाता है। – thewormsterror