0

非常努力地了解核心数据和关系。我当前的实体设置是这样的:

简介 <-->>活动

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

如果我走在正确的轨道上,我在哪里可以在添加事件时更新配置文件?

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

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

1 回答 1

1

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

  1. 使用目标事件在配置文件中创建一个名为 eventRelation 的关系
  2. 对具有目标配置文件的配置文件 (profileRelation) 执行相同操作并设置其逆。倒数是另一个实体中的属性名称,在这种情况下,Profile 中 eventRelation 的倒数是 profileRelation。

现在您需要更新模型的文件,将这些属性添加到它们。例如在 Profiles.m 中添加:@property (nonatomic, retain) Events * 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 的事件实体。然后,如果你想在事件中添加一个日期,你可以获取你想要的事件并执行:Events * event ... fetch it; event.date = [NSDate ...]

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

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

之后,您只需要保存它。

于 2013-10-15T15:52:17.513 回答