这种插入/编辑Core Data嵌套对象的方法最有效吗?

时间:2012-09-27 21:16:12

标签: objective-c core-data

我有以下核心数据模型(例如简化):

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

最后,如果用户没有放弃插入,则将person对象插入到对象上下文中并保存

[self.objectContext insertObject:self.collectionItem];

处理嵌套对象(例如,区域可能存在或可能不存在于Core Data中)的嵌套Core Data对象的最佳方法是什么?赞赏的例子或参考文献。

0 个答案:

没有答案