私は次のコアデータモデルを持っています(たとえば単純化されています):
Person
->Address
City
>Region
RegionName
>Country
CountryName
新しい人が作成されたとき
NSManagedObjectModel *objectModel=[[AppCoreData sharedInstance]objectModel];
NSEntityDescription *entity=[[objectModel entitiesByName] valueForKey:@"Beverage"];
Person *person=(Person*)[[NSManagedObject alloc]initWithEntity:entity insertIntoManagedObjectContext:nil];
Personエンティティは、オブジェクトコンテキストに挿入せずに作成されるため、必要に応じて挿入を簡単に中止できます。
次に、ユーザーはデータベースに存在する場合と存在しない場合があるリージョンを選択できます。リージョンが存在するかどうかを確認するために検索が実行されます
NSEntityDescription *entityDescription=[NSEntityDescription entityForName:@"Region" inManagedObjectContext:self.objectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
request.returnsObjectsAsFaults=NO;
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"id == %@",region.id];
[request setPredicate:predicate];
NSError *error=nil;
NSArray *array= [self.objectContext executeFetchRequest:request error:&error];
if ([array count] == 1) {
//use existing object
person.region=(Region*)[array objectAtIndex:0];
} else {
//create new object
NSEntityDescription *entity=[[objectModel entitiesByName] valueForKey:@"Region"];
self.collectionItem.beverage.region=(Region*)[[NSManagedObject alloc]initWithEntity:entity insertIntoManagedObjectContext:nil];
person.region.id=[NSNumber numberWithInt:[regionID intValue]];
person.region.regionName=regionName;
}
最後に、ユーザーが挿入を放棄しない場合、人物オブジェクトがオブジェクトコンテキストに挿入され、保存されます
[self.objectContext insertObject:self.collectionItem];
ネストされたオブジェクト、たとえば、Regionがコアデータに存在する場合と存在しない場合がある場合に、ネストされたコアデータオブジェクトを処理するための最良のアプローチは何ですか?例や参考資料をいただければ幸いです。