2010-10-10 6 views
10

मैं वर्तमान में एक NSFetchedResultsController स्थापित करने का प्रयास कर रहा हूं जो कई तालिकाओं में इकाइयों की संख्या के आधार पर मेरी तालिका दृश्य को ऑर्डर करेगा। मुझे यकीन नहीं है कि गिनती करते समय इससे कोई फर्क पड़ता है, लेकिन यह एक व्यस्त संबंध भी है।कोर डेटा: कई रिश्तों में गिनती द्वारा क्रमबद्ध

मैंने सोचा था कि कुछ इस तरह ठीक काम करेगा:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Parent" 
inManagedObjectContext:managedObjectContext]; 

NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] 
initWithKey:@"[email protected]" ascending:YES]; 

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, 
nil]; 

[fetchRequest setSortDescriptors:sortDescriptors]; 

मैं 'आ रही है KVC कुल युक्त जहां एक नहीं होना चाहिए मुख्यपथ; बच्चों को संभालने में असफल रहा। @ गिनती '।

क्या गलत हो सकता है पर कोई विचार?

+0

आप 'alloc' और' initWithObjects: 'के बजाय' arrayWithObject: 'का उपयोग करना चाह सकते हैं। अन्य कारणों से, सरणी जारी नहीं करने से रिसाव नहीं होगा। –

+0

यह जो मैं पूरा करने की कोशिश कर रहा हूं उसके लिए यह सिर्फ छद्म कोड था, मैं अपने वास्तविक कोड में सरणी जारी कर रहा हूं। – avenged

+0

इसी प्रकार का प्रश्न: http://stackoverflow.com/questions/1520522/nssortdescriptor-and-to-many-relationships – paulmelnikow

उत्तर

0

मैं अपनी इकाई में एक गिनती संपत्ति जोड़ना समाप्त कर दिया, जब भी कोई नया रिश्ता जोड़ा गया तो मैंने इसे बढ़ाया। fetchedResultsController उपयोग करने के लिए आसान बना दिया।

रुचि रखते हैं यदि आपको केवीसी का उपयोग करने का कोई तरीका मिल गया है। मुझे इस हैक को ठीक करने की आवश्यकता नहीं है।

कुछ इस तरह उपयोगी हो सकता है:

entity *match;  
match = (entity *)[objects objectAtIndex:0]; 
     NSSet *t = [match valueForKey:@"entity"]; 
     if(![t containsObject:newEntity]){ 
      int newCount = [match.count intValue] +1; 
     [match addEntityObject:newEntity]; 
      [match setCount:[NSNumber numberWithInt:newCount]]; 
+0

ऐसा लगता है कि यह एक बेहतर और अधिक सुरुचिपूर्ण समाधान होना चाहिए। क्या कोई इसे जानता है? धन्यवाद। – Ricardo

3

जहाँ तक मुझे पता आप क्वेरी में @count लागू नहीं कर सकते, लेकिन जैसा कि आप आसानी से इसे लाए जाने वालों के लिए आवेदन कर सकते हैं।

NSEntityDescription * entity = [NSEntityDescription entityForName:@"Parent" inManagedObjectContext:self.managedObjectContext]; 

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:entity]; 
NSError *error; 
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"[email protected]" ascending:NO]; 
NSArray *descriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
NSArray *sortedArray = [results sortedArrayUsingDescriptors:descriptors]; 
1

मैं एक पूर्णांक प्रकार के रूप में अपने प्रबंधित ऑब्जेक्ट मॉडल के लिए एक विशेषता के रूप में KVO एक्सेसर -countOf<Key> गयी। मैंने अपने NSManagedObject सबक्लास में इस विशेषता के लिए कुछ भी लागू नहीं किया है, क्योंकि सभी जादू हुड के नीचे होते हैं।

तो इस विशेष मामले में, को Parent इकाई में एक विशेषता जोड़ें। यह अपवाद को हटा देना चाहिए।

संपादित करें: यह फ़िक्स केवल आईओएस 6.0 पर नहीं, आईओएस 6.0 पर काम करता है।

+1

अरे, क्या आप संभवतः इस पर अधिक जानकारी दे सकते हैं? लेखक को मॉडल में countOfChildren विशेषता जोड़नी चाहिए, है ना? यह किस प्रकार का गुण होगा? इस सेटअप के लिए और कुछ है? –