7
我在我的應用程序下面的數據模型:CoreData檢查一對多關係包含對象
基本上我想藏漢存儲國名的城市名稱。每個城市屬於一個國家,一個國家包含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];
但是,如果搜索涉及多個實體,該怎麼辦?或換句話說:我如何爲一個國家添加唯一的城市名稱?
非常感謝您!
嗨馬丁,謝謝你的回覆。這個解決方案對我的代碼看起來只有很小的改進。有沒有辦法創建一個fetchrequest,然後執行'countForFetchRequest:'返回0爲「國家不包含這個城市」或值> 0爲「國家包含這個城市」?我真的不喜歡爲了減少內存使用而創建對象... – pmk
@pmk:你說得對。我已經更新了答案。 –
我剛剛測試過你的代碼,它現在完美運行。我編輯了你的答案代碼,以便其他人可以利用它,非常感謝你:) – pmk