शामिल मैं अपने ऐप में निम्न डेटा मॉडल है:CoreData की जांच करता है, तो करने के लिए कई-संबंध वस्तु
मूल रूप से मैं शहर के नाम के रूप में अच्छी तरह से देश के नाम संग्रहीत करना चाहते हैं। प्रत्येक शहर एक देश से संबंधित है और एक देश में 0-एन शहर हैं।
इससे पहले कि मैं अब किसी निश्चित देश में नए शहरों को जोड़ूं, मुझे यह जानना होगा कि देश में पहले से ही इस नाम के साथ एक शहर है या नहीं।
अब तक मैं यह कर:
- (BOOL)countryForName:(NSString *)countryName containsCity:(NSString *)cityName {
Countries *country = [self countryForName:countryName];
NSSet *cityNames = [country valueForKey:@"cities"];
for (Cities *city in cityNames) {
if ([city.cityName isEqualToString:cityName]) {
return YES;
}
}
return NO;
}
यह स्पष्ट रूप से बहुत धीमी है, मैं क्या जरूरत है एक बराबर एक सही विधेय के साथ लाने के लिए है। मैं इस तरह एक इकाई के लिए खोज करें:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Countries" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"countryName" ascending:YES];
NSArray *sortDescriptors = @[sortDescriptor];
fetchRequest.sortDescriptors = sortDescriptors;
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"GetCountryList"];
aFetchedResultsController.delegate = self;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"countryName == %@", countryName];
[aFetchedResultsController.fetchRequest setPredicate:predicate];
लेकिन मैं यह कैसे करते हो, तो एक खोज, विभिन्न इकाइयों में शामिल है? या दूसरे शब्दों में: मैं केवल एक देश के लिए अद्वितीय शहर के नाम कैसे जोड़ूं?
बहुत बहुत धन्यवाद!
हाय मार्टिन, इस उत्तर के लिए धन्यवाद। यह समाधान केवल मेरे कोड में बहुत कम सुधार की तरह दिखता है। क्या कोई fetchrequest बनाने का कोई तरीका नहीं है और फिर 'countForFetchRequest:' देश को "इस शहर में शामिल नहीं है" के लिए 0 लौटा रहा है या "देश में इस शहर में" के लिए मूल्य> 0 है? मैं स्मृति उपयोग को कम करने के लिए वास्तव में वस्तुओं को बनाना पसंद नहीं करता ... – pmk
@pmk: आप सही हैं। मैंने जवाब अपडेट किया है। –
मैंने अभी आपके कोड का परीक्षण किया है, यह अब पूरी तरह से काम करता है। मैंने आपके उत्तर कोड को संपादित किया ताकि अन्य इसका लाभ उठा सकें, बहुत बहुत धन्यवाद :) – pmk