が含まれている場合、私は私のアプリでは、以下のデータモデルを持っている:CoreDataチェック対多の関係は、オブジェクト
基本的に私は、都市名としてaswell国名を保存したいです。各都市は1つの国に属し、1つの国には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];
をしかし、検索は、複数のエンティティを含む場合、私はこれをどのように行うのですか?言い換えれば、ある国のユニークな都市名を追加するにはどうすればいいですか?
ありがとうございました!
こんにちはMartinさん、この返信に感謝します。このソリューションは、私のコードを少し改良したようにしか見えません。 fetchrequestを作成し、 'countForFetchRequest:'を実行する方法はありませんか?「国はこの都市を含んでいません」または0を返します。メモリ使用量を減らすためにオブジェクトを作成するのは本当に好きではありません。 – pmk
@pmk:そうです。私は答えを更新しました。 –
私はちょうどあなたのコードをテストしました、それは今完全に動作します。私はあなたの回答コードを編集して他の人がそれを利用できるようにしました。ありがとうございました:) – pmk