У меня есть следующая модель данных в моем приложении:
В основном я хочу хранить названия стран, а также названия городов. Каждый город принадлежит одной стране, а одна страна содержит 0 - n городов.
Прежде чем я добавлю новые города в определенную страну, мне нужно знать, есть ли в этой стране город с таким названием.
До сих пор делаю так:
- (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];
Но как мне это сделать, если в поиске участвуют несколько объектов? Или, другими словами: как добавить уникальные названия городов только для одной страны?
Большое спасибо!