2010-04-16 28 views
9

के साथ एक अद्वितीय परिणाम सेट पुनर्प्राप्त करना मेरे पास एक कोर डेटा आधारित ऐप है जो इकाइयों का एक समूह प्रबंधित करता है। मैं निम्नलिखित करने में सक्षम होने के लिए देख रहा हूँ।कोर डेटा

मेरे पास गुणों के साथ "कुछ एंटीटी" इकाई है: नाम, प्रकार, रैंक, foo1, foo2।

अब, अगर हम एसक्यूएल शर्तों में सख्ती से बोल रहे हैं तो कुछ एंटीटीटी में कई पंक्तियां हैं। जो मैं पूरा करने की कोशिश कर रहा हूं वह केवल उपलब्ध प्रकारों को पुनर्प्राप्त करना है, भले ही प्रत्येक इंस्टेंस में डुप्लिकेट प्रकार हो। मुझे रैंक के अनुसार क्रम में लौटने की भी आवश्यकता है।

NSError *error = NULL; 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setReturnsDistinctResults:YES]; 
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:@"type", @"rank", nil]]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"SomeEntity" inManagedObjectContext:managedObjectContext]; 
[fetchRequest setEntity:entity]; 

// sort by rank 
NSSortDescriptor *rankDescriptor = [[NSSortDescriptor alloc] initWithKey:@"rank" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:rankDescriptor,nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
[sortDescriptors release]; 
[rankDescriptor release]; 

NSArray *fetchResults = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 

[fetchRequest release]; 

return fetchResults; 

अब ठीक है कि निम्नलिखित के साथ क्रैश हो रहा है:

SELECT DISTINCT(type) ORDER BY rank ASC

यहाँ कोड मैं अब तक कि तोड़ने है है है: तो एसक्यूएल में, मैं क्या तलाश कर रहा हूँ निम्नलिखित है: Invalid keypath section passed to setPropertiesToFetch:

+0

अपडेट किया गया उदाहरण। –

+0

लाने के लिए गुणों पर एक त्रुटि हुई थी और यदि आप @ "टाइप" और @ "रैंक" लाने के लिए गुण निर्दिष्ट करेंगे, तो आप दोनों गुणों पर विशिष्ट होंगे। आपको केवल @ "प्रकार" संपत्ति निर्दिष्ट करना चाहिए –

उत्तर

18
NSManagedObjectContext * ctx ; /* some ctx */  
NSFetchRequest * req; /* your request */ 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"SomeEntity" inManagedObjectContext:context]; 
NSDictionary *entityProperties = [entity propertiesByName]; 
[req setEntity:entity]; 
[req setReturnsDistinctResults:YES]; 
[req setPropertiesToFetch:[NSArray arrayWithObject:[entityProperties objectForKey:@"type"]]]; 
[req setSortDescriptors:[NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"rank" ascending:YES]]]; 
NSArray * result = [ctx executeFetchRequest:req error:nil]; 
+0

जीड ऑर्डर द्वारा संपादित उदाहरण। परिणामस्वरूप आपको रैंक –

+0

रैंक द्वारा क्रमबद्ध विभिन्न प्रकारों के साथ 'कुछ एंटीटी' का ऐरे प्राप्त होगा। लाने के लिए संपादित सबसे महत्वपूर्ण। –

+3

[fetchRequest setResultType: NSDictionaryResultType]; इसे सेट करें, और आपको परिणाम में कोई कुछ नहीं मिलेगा, लेकिन आपके मामले में –