1

私は次のコアデータモデルを持っています(たとえば単純化されています):

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がコアデータに存在する場合と存在しない場合がある場合に、ネストされたコアデータオブジェクトを処理するための最良のアプローチは何ですか?例や参考資料をいただければ幸いです。

4

0 に答える 0