2013-10-15 158 views
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]; 
} 

回答

1

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

  1. 在外形与目的地活动创建一个名为eventRelation一个关系
  2. 做与目标简型材(profileRelation)相同,并设置了逆。 inverse是另一个实体中属性的名称,在这种情况下,Profile中的eventRelation的反向是profileRelation。

现在您需要更新您的模型将这些属性添加到它们的文件。例如Profiles.m中的 add: @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和事件实体与ATT ributes名称,日期和关系profileRelation。 然后,如果您想在事件中添加日期,则可以获取所需的事件并执行以下操作: 事件*事件...获取它; event.date = [NSDate的...]

另一种选择是:您已经赚得了一个配置文件,您想更改配置文件名称和一个事件的日期(你已经拥有此项配置的情况下),你做:

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

之后,你只需要保存它。

+0

好的,所以我想我可能会考虑这个倒退..我来自一个传统的关系数据库背景。我试图看看上面的示例...因此,我没有告诉事件实体与哪个配置文件相关,而是将事件对象添加到配置文件对象中? – Mark

+0

你说得对。创建事件并将其添加到配置文件。然后,如果您为配置文件执行提取,则可以从该属性访问该事件。事件的情况也是如此:获取事件允许您访问其配置文件 – Alex

+0

因此,在上面的示例中,我将如何添加say,eventdate(它位于Events实体中)?我如此绝望地困惑 – Mark