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 实体是在不插入对象上下文的情况下创建的,因此在必要时很容易放弃插入。

然后用户可以选择数据库中可能存在或不存在的区域。执行搜索以查看 Region 是否存在

  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];

处理嵌套对象(例如,区域可能存在或不存在于核心数据中的嵌套核心数据对象)的最佳方法是什么?示例或参考表示赞赏。

4

0 回答 0