初学者核心数据和关系

时间:2013-10-15 15:34:19

标签: ios core-data

非常努力地了解核心数据和关系。我目前的实体设置如下:

个人资料< - >>事件

我有一切工作(我现在可以添加,更改和删除配置文件和事件,我只是没有关系连接)。所以基于此,我应该只需要建立一次“连接”关系吧?当我添加一个事件时,它只需要知道要关联哪个配置文件,然后任何更改,删除等都将由核心数据处理?

如果我在正确的轨道上,在添加活动时,我在哪里实施更新配置文件?

我正在根据表视图控制器的委派保存事件......

FROM THE ADD EVENT VIEW CONTROLLER


AddEventViewController.m

[self.currentEvent setEventdesc:eventDescField.text]
[self.delegate addEventViewControllerDidSave];



FROM THE EVENT TABLE VIEW CONTROLLER

EventTableViewController.m

-(void) addEventViewControllerDidSave {
  NSError *error = nil;
  NSManagedObjectContext *context = self.managedObjectContext;

    if (![context save:&error]) {
      NSLog(@"Error %@", error);
    }

   [self dismissViewControllerAnimated:YES completion: NIL];
}

1 个答案:

答案 0 :(得分:1)

首先,我猜你在核心数据中没有关系。 然后,您需要添加它们之间的关系:

  1. 在配置文件中使用目标事件创建一个名为eventRelation的关系
  2. 对配置文件(profileRelation)执行与目标配置文件相同的操作并设置其反向。 inverse是另一个实体中属性的名称,在这种情况下,Profile中的eventRelation的反转是profileRelation。
  3. 现在您需要更新模型中添加这些属性的文件。例如 在Profiles.m中添加: @property(非原子,保留)事件* eventRelation。

    最后,在代码中,当您要保存事件关系时,您需要执行以下操作:

    Profile * newProfile = (Profiles *)[NSEntityDescription insertNewObjectForEntityForName:@"Profile" inManagedObjectContext:self.managedObjectContext];
    
    Events * addEvent = (Events *)[NSEntityDescription insertNewObjectForEntityForName:@"Events" inManagedObjectContext:self.managedObjectContext];
    
    //Set event and profile data
    
    newProfile.eventRelation = addEvent;
    
    //And save changes  
    [self.managedObjectContext save:&error];
    

    现在,每次您获取实体时,您都可以使用以下方式访问其他对象:

    //fetch data into self.profiles
    profiles.eventRelation
    

    更新了示例:

    假设您拥有包含属性的实体配置文件:名称,姓氏和关系eventRelation,以及具有属性名称,日期和关系profileRelation的事件实体。 然后,如果要在事件中添加日期,则可以获取所需的事件并执行以下操作:     事件*事件......获取它;     event.date = [NSDate ...]

    另一个选项是:您已经提取了一个配置文件,并且您想要更改配置文件名称和一个事件的日期(您已在该配置文件中有一个事件),您可以:

    Profile * profile ... fetch it
    profile.name = @"asd"
    profile.eventRelation.date = [NSDate ...];
    

    之后,你只需要保存它。